转盘抽奖 做记录

/**
* 抽奖
* @param activity618DrawsEvt
* @return
*/
public Message getTurntableLottery(Activity618DrawsEvt activity618DrawsEvt) {

    //获取抽奖手机号码
    String phone = activity618DrawsEvt.getPhone();

    //查询订单获取的抽奖次数
    Integer count=queryWeborderIdBy618SignAnd618UserPhone(phone,"618");
    //已经使用的抽奖次数
    Integer alreadyDraw=queryAlreadylotteryCountByPhone(phone);
    Integer remain=count-alreadyDraw;

    if(remain<=0){
        return R.error("您暂时没有抽奖机会");
    }

    //获取活动所有奖品列表
    TfActivityGift tfActivityGift = new TfActivityGift();
    List<TfActivityGift>list= tfActivityGiftDao.queryAll(tfActivityGift);

    //抽奖
    int random =tfActivityUserOperationService.getPrize(list);
    TfActivityGift prize = tfActivityGiftDao.queryById(random + 1);

    //循环抽奖
    Integer giftNum = prize.getGiftNum();
    while(giftNum==0){
        int random1 = tfActivityUserOperationService.getPrize(list);
        prize = tfActivityGiftDao.queryById(random1 + 1);
        giftNum = prize.getGiftNum();
    }

    //改变奖品个数
    giftNum--;
    prize.setGiftNum(giftNum);
    tfActivityGiftDao.update(prize);

    //用户明细操作--抽奖记录
    ActUserOperation build1 = ActUserOperation.builder().phone(phone).createTime(new Date()).userOperation("6").luckDraw("-1").prizeName(prize.getGiftName()).activityId("20210618").build();
    ActUserOperation insert = actUserOperationService.insert(build1);
    Integer id = insert.getId();


    PrizeReceiveVo prizeReceiveVo = new PrizeReceiveVo();
    prizeReceiveVo.setAngle(prize.getAngle());
    prizeReceiveVo.setGiftName(prize.getGiftName());
    prizeReceiveVo.setUserDrawOperationId(id);
    prizeReceiveVo.setDraws(String.valueOf(remain-1));

    return R.success(prizeReceiveVo);

}

关键代码是这里
在这里插入图片描述

在这里插入图片描述

public int getPrize(List list) {
int random = -1;

    try{
    //计算权重和
    double sumWeight = 0;
    for(TfActivityGift tfActivityGift : list){
        sumWeight += tfActivityGift.getWeight();
    }

    //产生随机数
    double randomNumber;
    randomNumber = Math.random();

    //根据随机数在所有奖品分布的区域并确定所抽奖品
    double d1 = 0;
    double d2 = 0;
    for(int i=0;i<list.size();i++){
        d2 += Double.parseDouble(String.valueOf(list.get(i).getWeight()))/sumWeight;
        if(i==0){
            d1 = 0;
        }else{
            d1 +=Double.parseDouble(String.valueOf(list.get(i-1).getWeight()))/sumWeight;
        }
        if(randomNumber >= d1 && randomNumber <= d2){
            random = i;
            break;
        }
    }
     }catch(Exception e){
        log.error("生成抽奖随机数出错,出错原因:" +e.getMessage());
    }
    return random;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值