中秋活动-根据权重抽奖

简介: 中秋活动-根据权重抽奖
/**
     *
     * @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;
    }
相关文章
|
8月前
|
索引
实现九宫格概率抽奖(与往常不同的方法哦)
实现九宫格概率抽奖(与往常不同的方法哦)
195 0
|
存储 Cloud Native 大数据
开发者社区连续打卡抽奖活动规则
庆祝“探索云世界”上线,各子社区推出连续打卡抽奖活动
25489 31
do while实现九宫格概率抽奖
do while实现九宫格概率抽奖
盲盒抽奖流程
盲盒抽奖流程
238 0
|
小程序
抽奖活动小程序之随机选取中奖用户功能实现
抽奖活动小程序之随机选取中奖用户功能实现
抽奖活动小程序之随机选取中奖用户功能实现
|
JSON 前端开发 JavaScript
年会没中奖,老板买了一个抽奖程序
老板买了一个抽奖程序,我使用 react 来实现一版与公司年会一模一样的功能,并且还可以设置内定名额。
344 0
|
存储 JavaScript 程序员
五分钟学会做一个在线抽奖系统,手把手教你抽奖还学不会嘛?
五分钟学会做一个在线抽奖系统,手把手教你抽奖还学不会嘛?
529 0
|
供应链 前端开发 NoSQL
幸运大转盘抽奖逻辑实现
幸运大转盘抽奖逻辑实现
2404 0
幸运大转盘抽奖逻辑实现
|
移动开发 监控 安全
玩归玩,闹归闹,别拿抽奖开玩笑
轻轻的一个稳,已经打动我的心
953 0