Initial commit

This commit is contained in:
2026-04-23 16:58:11 +08:00
commit 267eba1eca
2582 changed files with 273338 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
1.根据用户类型确定使用哪个奖池,普通奖池,补偿奖池,三级爆率奖池,
在再根据宝箱id和用户类型获取锁防止同一个宝箱同一个用户类型的并发抽奖持续10秒重试三次
2.获取三个奖池对象,判断三个奖池是否为空,如果为空,就初始化创建空奖池
3.查询用户是否拥有三级爆率,如果不为空,说明有三级爆率
4.根据是否有三级爆率权限选择使用哪个奖池checkPool() 方法首先查看当前prizePool对象是否有数据
是直接返回否则去redis中查看是否有数据有则将数据加入prizePool对象中
否则去数据库中查询并加入prizePool对象中有三级爆率就使用thirdExplosivePrizePool否则使用prizePool
5.补偿机制,先查询用户的补偿记录是否有值,如果是补偿箱并且没有补偿记录,创建空的补偿记录,如果有补偿记录,查看是否到达补偿阈值,
如果是补偿箱并且补偿值>=阈值,将切换到补偿奖池,并将补偿值清楚,将补偿记录删除
6.执行抽奖的算法doLottery方法箱子里面包含饰品及其数量获取饰品总数量并且随机五次并记录最后一次的值
然后循环每个饰品的位置如果这个位置的值和记录的最后一次的值相同拿到当前饰品的id
如果循环多次没有拿到,就取饰品的第一个(按序给),库存减一