java根据权重抽奖

简介: java根据权重抽奖
    /**
     *
     * @param request 盲盒抽奖
     * @param request
     * @return
     */
    @Override
    public BGitf lotteryResults(HttpServletRequest request) {
        BUserInfo userInfo = ibUserInfoService.validationToken(request);
        Long id = userInfo.getId();
        String phoneNum = userInfo.getPhoneNum();
        String nickName = userInfo.getNickName();
        String isNewUser = userInfo.getIsNewUser();
        Assert.isTrue(isNewUser.equals("1"), "抱歉,您不是新用户");
        List<BGitf> bGitfs = bGitfMapper.selectBGitfList(   new BGitf());
        BGitf bGitf = mainWeightRandom(bGitfs);
        Long gitfId = bGitf.getGitfId();
        String gitfName = bGitf.getGitfName();
        String gitfImge = bGitf.getGitfImge();
        BUserAwardRecord bUserAwardRecord = new BUserAwardRecord();
        bUserAwardRecord.setUserId(id);
        bUserAwardRecord.setAwardId(gitfId);
        bUserAwardRecord.setAwardName(gitfName);
        bUserAwardRecord.setGitImge(gitfImge);
        bUserAwardRecord.setUserName(nickName);
        bUserAwardRecord.setUserPhone(phoneNum);
        bUserAwardRecord.setCreateTime(new Date());
        bUserAwardRecordMapper.insertBUserAwardRecord(bUserAwardRecord);
        isNewUser = "1";
        userInfo.setIsNewUser(isNewUser);
        bUserInfoMapper.updateBUserInfo(userInfo);
        String token = UUID.randomUUID().toString();
        redisTemplate.opsForValue().set(token, JSON.toJSONString(userInfo),5, TimeUnit.HOURS);
        return bGitf;
    }
    /**
     * 抽奖方法
     * @param awardEntities
     * @return
     */
    // 权重主方法
    public static BGitf mainWeightRandom(List<BGitf> awardEntities) {
        Integer weightSum = 0;
        //计算总权重
        for (BGitf wc : awardEntities) {
            weightSum += wc.getGitfProbability();
        }
        if (weightSum <= 0) {
            return null;
        }
        // n in [0, weightSum)
        //产生一个[0, weightSum) 的随机数
        Random random = new Random();
        Integer n = random.nextInt(weightSum);
        //判断在那个权重区间
        Integer m = 0;
        for (BGitf wc : awardEntities) {
            if (m <= n && n < m + wc.getGitfProbability()) {
                return wc;
            }
            m += wc.getGitfProbability();
        }
        return null;
    }
相关文章
|
6月前
|
Java
【Java】抽奖系统———保姆学习教程
【Java】抽奖系统———保姆学习教程
104 0
|
6天前
|
Java
Java代码如何打造抽奖系统
Java代码如何打造抽奖系统
23 0
|
9月前
|
存储 Java 数据安全/隐私保护
用Java完成商场幸运抽奖系统的开发
本章技能目标 理解并使用选择结构解决问题 理解并使用循环结构解决问题 掌握各种数据类型 理解并使用数组解决问题
104 0
|
11月前
|
算法
java202303java学习笔记第三十八天常用工具包带权重的随机算法2
java202303java学习笔记第三十八天常用工具包带权重的随机算法2
68 0
|
12月前
java202303java学习笔记第三十九天综合练习抽奖1
java202303java学习笔记第三十九天综合练习抽奖1
34 0
|
12月前
java202303java学习笔记第三十九天综合练习抽奖2
java202303java学习笔记第三十九天综合练习抽奖2
35 0
|
12月前
java202303java学习笔记第三十三天带权重的随机点名
java202303java学习笔记第三十三天带权重的随机点名
33 0
java202302java学习笔记第十一天-抽奖的两种实现方式1
java202302java学习笔记第十一天-抽奖的两种实现方式1
38 0
java202302java学习笔记第十一天-抽奖的两种实现方式1
java202302java学习笔记第十一天-抽奖的两种实现方式2
java202302java学习笔记第十一天-抽奖的两种实现方式2
38 0
java202302java学习笔记第十一天-抽奖的两种实现方式2
|
算法 Java
Java | 手把手教你实现一个抽奖系统(Java版)
Java | 手把手教你实现一个抽奖系统(Java版)
817 1