记得上下班打卡 | git大法好,push需谨慎

Commit e53cffa6 authored by jiangxiulong's avatar jiangxiulong

抽奖完善

parent f93414ec
......@@ -122,7 +122,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
if (CollectionUtils.isEmpty(activityPrizeVoArrayList)) {
return ResponseDto.failure("活动太火爆了,奖品已经没有库存啦~");
}
IntegralActivityPrizeVo integralActivityPrizeVo = this.lotteryDraw(activityPrizeVoArrayList);
IntegralActivityPrizeVo integralActivityPrizeVo = this.lotteryDraw1(activityPrizeVoArrayList);
// 减库存 顺便判断库存是否够 -1的时候回滚回去
long activityPrizeNum = redisDataUtils.decrIntegralActivityPrizeNum(integralActivityId, integralActivityPrizeVo.getPrizeId(), 1);
......@@ -323,9 +323,45 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
}
/**
* 抽奖方法
* 抽奖方法 积分、券
*/
private static IntegralActivityPrizeVo lotteryDraw(List<IntegralActivityPrizeVo> prizeList) {
private static IntegralActivityPrizeVo lotteryDraw1(List<IntegralActivityPrizeVo> prizeList) {
if (prizeList == null || prizeList.isEmpty()) {
return null;
}
int size = prizeList.size();
// 计算总概率,这样可以保证不一定总概率是1
BigDecimal sumRate = BigDecimal.ZERO;
for (IntegralActivityPrizeVo prize : prizeList) {
sumRate = sumRate.add(prize.getWinningProbability());
}
// 计算每个物品在总概率的基础下的概率情况
List<BigDecimal> sortOrignalRates = new ArrayList<>(size);
BigDecimal tempSumRate = BigDecimal.ZERO;
for (IntegralActivityPrizeVo prize : prizeList) {
tempSumRate = tempSumRate.add(prize.getWinningProbability());
sortOrignalRates.add(tempSumRate.divide(sumRate, 4, BigDecimal.ROUND_HALF_UP));
}
// 根据区块值来获取抽取到的物品索引
double nextDouble = Math.random();
BigDecimal nextDoubleNew = BigDecimal.valueOf(nextDouble);
sortOrignalRates.add(nextDoubleNew);
Collections.sort(sortOrignalRates);
int index = sortOrignalRates.indexOf(nextDoubleNew);
IntegralActivityPrizeVo integralActivityPrizeVo = prizeList.get(index);
return integralActivityPrizeVo;
}
/**
* 抽奖方法 实物、会员
*/
private static IntegralActivityPrizeVo lotteryDraw2(List<IntegralActivityPrizeVo> prizeList) {
if (prizeList == null || prizeList.isEmpty()) {
return null;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment