JAVA抽奖功能和扣减库存

抽奖次数验证之后,就正式到了抽奖环境,点击抽奖进行抽奖,后台利用随机数,并设置奖品区域,利用数字落点进行判断中奖奖项,
中奖后需要进行库存的扣减,这里使用mysql 的乐观锁方式实现,
代码就不带码了 直接放参考链接,需要哪部分直接看相关链接就行了

链接参考

1 奖品抽奖

https://zhuanlan.zhihu.com/p/196348874
里边就是介绍数字落点抽奖方式,也没完全照搬,自己进行了一点优化,挺不错的文章,

2 扣减库存

https://blog.csdn.net/u010347967/article/details/123788355
主要是介绍扣减的方式及其原理,

https://www.cnblogs.com/jingjiren/p/13265732.html
这篇就主要用代码来介绍乐观锁的实现,

以上三个链接,加上之前的

reids原子操作
https://blog.csdn.net/qq_43021813/article/details/124426497

中和一下就可以完成一套 抽奖功能

redis控制次数已经奖品信息,
抽奖设置中奖率 ,然后进行乐观锁的扣减库存,以及生成订单等等操作。

码码不易。码字更不易。记得点赞 👍

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的抽奖功能Java代码示例: ```java import java.util.ArrayList; import java.util.List; import java.util.Random; public class Lottery { // 奖品种类 private static final String[] PRIZES = {"一等奖", "二等奖", "三等奖", "参与奖"}; // 每种奖品的数量 private static final int[] PRIZE_COUNTS = {1, 2, 5, 100}; // 每种奖品的中奖概率 private static final double[] PRIZE_PROBABILITIES = {0.01, 0.03, 0.1, 0.5}; // 每个用户每天最多抽奖次数 private static final int MAX_LOTTERY_TIMES_PER_DAY = 3; // 抽奖记录 private List<String> lotteryRecord = new ArrayList<>(); // 获取随机数生成器 private Random random = new Random(); // 判断用户今天是否还可以继续抽奖 public boolean canLotteryToday(String userId) { int lotteryCountToday = 0; for (String record : lotteryRecord) { String[] fields = record.split(","); if (fields[0].equals(userId)) { lotteryCountToday++; } } return lotteryCountToday < MAX_LOTTERY_TIMES_PER_DAY; } // 抽奖 public String lottery(String userId) { if (!canLotteryToday(userId)) { return "今天您已经抽过奖了,请明天再来!"; } int prizeIndex = -1; double randomValue = random.nextDouble(); double sum = 0.0; for (int i = 0; i < PRIZE_PROBABILITIES.length; i++) { sum += PRIZE_PROBABILITIES[i]; if (randomValue < sum) { prizeIndex = i; break; } } String prize = PRIZES[prizeIndex]; PRIZE_COUNTS[prizeIndex]--; lotteryRecord.add(userId + "," + prize); return "恭喜您获得了:" + prize; } } ``` 以上代码中,抽奖功能的实现主要分为两个部分: 1. 判断用户今天是否还可以继续抽奖的逻辑,通过遍历抽奖记录来判断当天用户已经抽奖的次数是否达到上限; 2. 抽奖的逻辑,根据每个奖品的中奖概率来计算中奖结果,同时需要更新奖品数量和抽奖记录。 在实际应用中,可能需要加入更多的逻辑判断和安全措施,例如防止恶意用户抽奖等,但以上代码可以作为一个简单的抽奖功能的参考实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值