中秋活动-根据权重抽奖

简介: 中秋活动-根据权重抽奖
/**
     *
     * @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;
    }
相关文章
|
弹性计算 双11
阿里云今年出大招了!拉新五重奖励拿到手软!
爆款云服务器99元/年,2核2G、3M固定带宽不限流量、40G ESSD Entry云盘,新老同享,新购、续费同价,开发必备! 拉新再享五重奖励!错过一次等一年!(活动时间:2023年11月1日-11月30日) 活动链接:https://www.aliyun.com/activity/allinaliyun/ydsqmlx
998 1
盲盒抽奖流程
盲盒抽奖流程
198 0
|
JSON 前端开发 JavaScript
年会没中奖,老板买了一个抽奖程序
老板买了一个抽奖程序,我使用 react 来实现一版与公司年会一模一样的功能,并且还可以设置内定名额。
324 0
|
存储 JavaScript 程序员
五分钟学会做一个在线抽奖系统,手把手教你抽奖还学不会嘛?
五分钟学会做一个在线抽奖系统,手把手教你抽奖还学不会嘛?
494 0
五分钟学会做一个在线抽奖系统,手把手教你抽奖还学不会嘛?
|
iOS开发 MacOS Python
抽奖过程公布,我用了一款有故事的抽奖工具
之前学委发表了一篇文末抽奖的文章:Python中处理字符串的常用函数汇总【文末送书】
201 0
抽奖过程公布,我用了一款有故事的抽奖工具
|
移动开发 监控 安全
玩归玩,闹归闹,别拿抽奖开玩笑
轻轻的一个稳,已经打动我的心
943 0
|
开发者
【限时活动】阿里云论坛积分(云币)能兑换实物礼品啦!
近日,云栖社区上线了云朵兑换系统,可以用云朵兑换实物。积分商城传送门>> 51看着里面丰富的实物奖励心动不止,一查看积分。心中哇凉哇凉的。我在阿里云论坛这那多云币,难道就只是一个纯数字? 一键查询云币余额>> 然后就找管管一哭二闹三上吊。
6467 1
|
双11 开发者
阿里云开发者社区活动奖品“猫眼电影代金券”使用规则
2020年双11又来了!今年的双11有哪些技术突破?背后的原理都是啥?快来参加“2020阿里巴巴双11技术全观”活动,每天打卡学知识赢好礼吧!
68202 0
阿里云开发者社区活动奖品“猫眼电影代金券”使用规则