使用中文解释以下代码: // 获取奖池数据 List<PasturePrize> pasturePrizes = baseMapper.selectList(); // 中奖总率 long sum = pasturePrizes.stream().mapToLong(PasturePrize::getPrizeRate).sum(); // 随机生成一个中奖数 Random random = new Random(); int luckNum = random.nextInt((int) sum); Integer tmp = 0; Integer tmp2 = 0; for (int i = 0; i < pasturePrizes.size(); i++) { if (tmp2 == 0) { tmp2 = pasturePrizes.get(0).getPrizeRate(); } if (luckNum >= tmp && luckNum <= tmp2){ PasturePrizeRecord pasturePrizeRecord = new PasturePrizeRecord(); pasturePrizeRecord.setPrizeName(pasturePrizes.get(i).getPrizeName()); pasturePrizeRecord.setPhone(user.getPhone()); pasturePrizeRecord.setPrizePrice(pasturePrizes.get(i).getPrizePrice()); if(pasturePrizes.get(i).getPrizeType().equals("积分")){ pasturePrizeRecord.setPrizeType("积分"); }else { pasturePrizeRecord.setPrizeType("现金"); } pasturePrizeRecord.setUserId(user.getId()); pasturePrizeRecord.setUsername(user.getUsername()); pasturePrizeRecordMapper.insert(pasturePrizeRecord); if (pasturePrizes.get(i).getPrizeType().equals("现金")){ user.setBalance(pasturePrizes.get(i).getPrizePrice().add(user.getBalance())); }else { user.setFeed(pasturePrizes.get(i).getPrizePrice().add(user.getFeed())); } user.setDrawLotteryRaffleTotal(user.getDrawLotteryRaffleTotal() - 1); pastureUserMapper.updateById(user); return pasturePrizes.get(i); } else { if (tmp == 0L){ tmp = tmp + pasturePrizes.get(i).getPrizeRate(); } else { if (i < pasturePrizes.size() - 1){ tmp = tmp2; } } if (i< pasturePrizes.size() - 1){ tmp2 = tmp2 + pasturePrizes.get(i + 1).getPrizeRate(); } } }
时间: 2023-04-06 09:00:52 浏览: 94
这段代码是获取奖池数据,计算中奖总率,随机生成一个中奖数,然后根据中奖数在奖池中匹配对应的奖品。具体实现是通过遍历奖池中的每个奖品,将每个奖品的中奖率相加得到中奖总率,然后随机生成一个中奖数,再通过遍历奖池中的每个奖品,累加每个奖品的中奖率,直到累加值大于等于随机生成的中奖数,即可确定中奖的奖品。
阅读全文