抽奖荣誉id唯一处理
This commit is contained in:
parent
a8092e339a
commit
8bb6f3941e
@ -288,7 +288,7 @@ public class LotteryDrawExe {
|
|||||||
List<LotteryPrize> prizes = getPrizesByPool(activityId, stage);
|
List<LotteryPrize> prizes = getPrizesByPool(activityId, stage);
|
||||||
|
|
||||||
// 3. 过滤用户已中过的BADGE类型奖品
|
// 3. 过滤用户已中过的BADGE类型奖品
|
||||||
prizes = filterAlreadyWonBadgePrizes(prizes, progress.getUserId());
|
prizes = filterAlreadyWonBadgePrizes(prizes, progress.getUserId(), activityId);
|
||||||
|
|
||||||
// 4. 过滤美元奖励(充值金额为0的用户不能抽到)
|
// 4. 过滤美元奖励(充值金额为0的用户不能抽到)
|
||||||
prizes = filterMoneyPrizes(prizes, userRechargeAmount);
|
prizes = filterMoneyPrizes(prizes, userRechargeAmount);
|
||||||
@ -308,9 +308,9 @@ public class LotteryDrawExe {
|
|||||||
|
|
||||||
// 8. 如果抽中了BADGE类型奖品,记录到Redis
|
// 8. 如果抽中了BADGE类型奖品,记录到Redis
|
||||||
if (selectedPrize != null && "BADGE".equals(selectedPrize.getPrizeType())) {
|
if (selectedPrize != null && "BADGE".equals(selectedPrize.getPrizeType())) {
|
||||||
markBadgePrizeAsWon(progress.getUserId(), selectedPrize.getId());
|
markBadgePrizeAsWon(progress.getUserId(), activityId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return selectedPrize;
|
return selectedPrize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,7 +329,7 @@ public class LotteryDrawExe {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 过滤用户已中过的BADGE类型奖品
|
// 过滤用户已中过的BADGE类型奖品
|
||||||
prizes = filterAlreadyWonBadgePrizes(prizes, userId);
|
prizes = filterAlreadyWonBadgePrizes(prizes, userId, activityId);
|
||||||
|
|
||||||
// 过滤美元奖励(充值金额为0的用户不能抽到)
|
// 过滤美元奖励(充值金额为0的用户不能抽到)
|
||||||
prizes = filterMoneyPrizes(prizes, userRechargeAmount);
|
prizes = filterMoneyPrizes(prizes, userRechargeAmount);
|
||||||
@ -342,7 +342,7 @@ public class LotteryDrawExe {
|
|||||||
|
|
||||||
// 如果抽中了BADGE类型奖品,记录到Redis
|
// 如果抽中了BADGE类型奖品,记录到Redis
|
||||||
if (selectedPrize != null && "BADGE".equals(selectedPrize.getPrizeType())) {
|
if (selectedPrize != null && "BADGE".equals(selectedPrize.getPrizeType())) {
|
||||||
markBadgePrizeAsWon(userId, selectedPrize.getId());
|
markBadgePrizeAsWon(userId, activityId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return selectedPrize;
|
return selectedPrize;
|
||||||
@ -663,7 +663,7 @@ public class LotteryDrawExe {
|
|||||||
* @param userId 用户ID
|
* @param userId 用户ID
|
||||||
* @return 过滤后的奖品列表
|
* @return 过滤后的奖品列表
|
||||||
*/
|
*/
|
||||||
private List<LotteryPrize> filterAlreadyWonBadgePrizes(List<LotteryPrize> prizes, Long userId) {
|
private List<LotteryPrize> filterAlreadyWonBadgePrizes(List<LotteryPrize> prizes, Long userId, Long activityId) {
|
||||||
if (prizes == null || prizes.isEmpty()) {
|
if (prizes == null || prizes.isEmpty()) {
|
||||||
return prizes;
|
return prizes;
|
||||||
}
|
}
|
||||||
@ -676,7 +676,7 @@ public class LotteryDrawExe {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 检查用户是否已经中过这个BADGE
|
// 检查用户是否已经中过这个BADGE
|
||||||
String redisKey = "lottery:badge:won:" + userId + ":" + prize.getId();
|
String redisKey = "lottery:badge:won:" + userId + ":" + activityId;
|
||||||
String won = redisService.getString(redisKey);
|
String won = redisService.getString(redisKey);
|
||||||
|
|
||||||
if (won != null) {
|
if (won != null) {
|
||||||
@ -731,11 +731,10 @@ public class LotteryDrawExe {
|
|||||||
* @param userId 用户ID
|
* @param userId 用户ID
|
||||||
* @param prizeId 奖品ID
|
* @param prizeId 奖品ID
|
||||||
*/
|
*/
|
||||||
private void markBadgePrizeAsWon(Long userId, Long prizeId) {
|
private void markBadgePrizeAsWon(Long userId, Long activityId) {
|
||||||
String redisKey = "lottery:badge:won:" + userId + ":" + prizeId;
|
String redisKey = "lottery:badge:won:" + userId + ":" + activityId;
|
||||||
// 永久存储,表示该用户已经中过这个BADGE
|
// 永久存储,表示该用户已经中过这个BADGE
|
||||||
redisService.setString(redisKey, "1");
|
redisService.setString(redisKey, "1");
|
||||||
log.info("Mark BADGE prize as won. userId: {}, prizeId: {}", userId, prizeId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -302,7 +302,7 @@ public class LotteryMultiDrawExe {
|
|||||||
List<LotteryPrize> prizes = getPrizesByPool(activityId, stage);
|
List<LotteryPrize> prizes = getPrizesByPool(activityId, stage);
|
||||||
|
|
||||||
// 过滤用户已中过的BADGE类型奖品
|
// 过滤用户已中过的BADGE类型奖品
|
||||||
prizes = filterAlreadyWonBadgePrizes(prizes, progress.getUserId());
|
prizes = filterAlreadyWonBadgePrizes(prizes, progress.getUserId(), activityId);
|
||||||
|
|
||||||
// 过滤美元奖励(充值金额为0的用户不能抽到)
|
// 过滤美元奖励(充值金额为0的用户不能抽到)
|
||||||
prizes = filterMoneyPrizes(prizes, userRechargeAmount);
|
prizes = filterMoneyPrizes(prizes, userRechargeAmount);
|
||||||
@ -321,7 +321,7 @@ public class LotteryMultiDrawExe {
|
|||||||
|
|
||||||
// 如果抽中了BADGE类型奖品,记录到Redis
|
// 如果抽中了BADGE类型奖品,记录到Redis
|
||||||
if (selectedPrize != null && "BADGE".equals(selectedPrize.getPrizeType())) {
|
if (selectedPrize != null && "BADGE".equals(selectedPrize.getPrizeType())) {
|
||||||
markBadgePrizeAsWon(progress.getUserId(), selectedPrize.getId());
|
markBadgePrizeAsWon(progress.getUserId(), activityId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return selectedPrize;
|
return selectedPrize;
|
||||||
@ -419,7 +419,7 @@ public class LotteryMultiDrawExe {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 过滤用户已中过的BADGE类型奖品
|
// 过滤用户已中过的BADGE类型奖品
|
||||||
prizes = filterAlreadyWonBadgePrizes(prizes, userId);
|
prizes = filterAlreadyWonBadgePrizes(prizes, userId, activityId);
|
||||||
|
|
||||||
// 过滤美元奖励(充值金额为0的用户不能抽到)
|
// 过滤美元奖励(充值金额为0的用户不能抽到)
|
||||||
prizes = filterMoneyPrizes(prizes, userRechargeAmount);
|
prizes = filterMoneyPrizes(prizes, userRechargeAmount);
|
||||||
@ -439,7 +439,7 @@ public class LotteryMultiDrawExe {
|
|||||||
if (randomValue <= cumulative) {
|
if (randomValue <= cumulative) {
|
||||||
// 如果抽中了BADGE类型奖品,记录到Redis
|
// 如果抽中了BADGE类型奖品,记录到Redis
|
||||||
if ("BADGE".equals(prize.getPrizeType())) {
|
if ("BADGE".equals(prize.getPrizeType())) {
|
||||||
markBadgePrizeAsWon(userId, prize.getId());
|
markBadgePrizeAsWon(userId, activityId);
|
||||||
}
|
}
|
||||||
return prize;
|
return prize;
|
||||||
}
|
}
|
||||||
@ -448,7 +448,7 @@ public class LotteryMultiDrawExe {
|
|||||||
LotteryPrize lastPrize = prizes.get(prizes.size() - 1);
|
LotteryPrize lastPrize = prizes.get(prizes.size() - 1);
|
||||||
// 如果抽中了BADGE类型奖品,记录到Redis
|
// 如果抽中了BADGE类型奖品,记录到Redis
|
||||||
if (lastPrize != null && "BADGE".equals(lastPrize.getPrizeType())) {
|
if (lastPrize != null && "BADGE".equals(lastPrize.getPrizeType())) {
|
||||||
markBadgePrizeAsWon(userId, lastPrize.getId());
|
markBadgePrizeAsWon(userId, activityId);
|
||||||
}
|
}
|
||||||
return lastPrize;
|
return lastPrize;
|
||||||
}
|
}
|
||||||
@ -650,7 +650,7 @@ public class LotteryMultiDrawExe {
|
|||||||
* @param userId 用户ID
|
* @param userId 用户ID
|
||||||
* @return 过滤后的奖品列表
|
* @return 过滤后的奖品列表
|
||||||
*/
|
*/
|
||||||
private List<LotteryPrize> filterAlreadyWonBadgePrizes(List<LotteryPrize> prizes, Long userId) {
|
private List<LotteryPrize> filterAlreadyWonBadgePrizes(List<LotteryPrize> prizes, Long userId, Long activityId) {
|
||||||
if (prizes == null || prizes.isEmpty()) {
|
if (prizes == null || prizes.isEmpty()) {
|
||||||
return prizes;
|
return prizes;
|
||||||
}
|
}
|
||||||
@ -663,7 +663,7 @@ public class LotteryMultiDrawExe {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 检查用户是否已经中过这个BADGE
|
// 检查用户是否已经中过这个BADGE
|
||||||
String redisKey = "lottery:badge:won:" + userId + ":" + prize.getId();
|
String redisKey = "lottery:badge:won:" + userId + ":" + activityId;
|
||||||
String won = redisService.getString(redisKey);
|
String won = redisService.getString(redisKey);
|
||||||
|
|
||||||
if (won != null) {
|
if (won != null) {
|
||||||
@ -714,11 +714,10 @@ public class LotteryMultiDrawExe {
|
|||||||
* @param userId 用户ID
|
* @param userId 用户ID
|
||||||
* @param prizeId 奖品ID
|
* @param prizeId 奖品ID
|
||||||
*/
|
*/
|
||||||
private void markBadgePrizeAsWon(Long userId, Long prizeId) {
|
private void markBadgePrizeAsWon(Long userId, Long activityId) {
|
||||||
String redisKey = "lottery:badge:won:" + userId + ":" + prizeId;
|
String redisKey = "lottery:badge:won:" + userId + ":" + activityId;
|
||||||
// 永久存储,表示该用户已经中过这个BADGE
|
// 永久存储,表示该用户已经中过这个BADGE
|
||||||
redisService.setString(redisKey, "1");
|
redisService.setString(redisKey, "1");
|
||||||
log.info("Mark BADGE prize as won in multi-draw. userId: {}, prizeId: {}", userId, prizeId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user