栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java抽奖概率抽奖

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java抽奖概率抽奖

定义好将品类
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;


@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="LuckDrawActivityPrizeRel对象", description="抽奖活动奖品表")
public class LuckDrawActivityPrizeRel implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "id")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @ApiModelProperty(value = "奖项名称")
    private String prizeName;

    @ApiModelProperty(value = "最大中奖数")
    private Integer maxWinNumber;

    @ApiModelProperty(value = "每天最大中奖数")
    private Integer dayMaxWinNumber;

    @ApiModelProperty(value = "中奖概率")
    private Integer probability;

    @ApiModelProperty(value = "奖项类型1线下奖品,2积分,3会员卡月,4优惠券,5谢谢惠顾")
    private Integer prizeType;

    @ApiModelProperty(value = "所需积分")
    private Integer needScore;

    @ApiModelProperty(value = "图片")
    private String imgUrl;

    @ApiModelProperty(value = "类型值,积分,金额,优惠券等")
    private String prizeVal;

    @ApiModelProperty(value = "抽奖活动id")
    private Long luckActivityConfigId;

}
概率抽奖工具类
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class LotteryUtil {
    
    public static int lottery(List orignalRates) {
        if (orignalRates == null || orignalRates.isEmpty()) {
            return -1;
        }

        int size = orignalRates.size();

        // 计算总概率,这样可以保证不一定总概率是1
        double sumRate = 0d;
        for (double rate : orignalRates) {
            sumRate += rate;
        }

        // 计算每个物品在总概率的基础下的概率情况
        List sortOrignalRates = new ArrayList(size);
        Double tempSumRate = 0d;
        for (double rate : orignalRates) {
            tempSumRate += rate;
            sortOrignalRates.add(tempSumRate / sumRate);
        }

        // 根据区块值来获取抽取到的物品索引
        double nextDouble = Math.random();
        sortOrignalRates.add(nextDouble);
        Collections.sort(sortOrignalRates);

        return sortOrignalRates.indexOf(nextDouble);
    }

    public static int getJD(List orignalRates) {
        if (orignalRates == null || orignalRates.isEmpty()) {
            return -1;
        }

        int size = orignalRates.size();

        // 计算总概率,这样可以保证不一定总概率是1
        double sumRate = 0d;
        for (double rate : orignalRates) {
            sumRate += rate;
        }

        // 计算每个物品在总概率的基础下的概率情况
        List sortOrignalRates = new ArrayList(size);
        Double tempSumRate = 0d;
        for (double rate : orignalRates) {
            tempSumRate += rate;
            sortOrignalRates.add(tempSumRate / sumRate);
        }

        // 根据区块值来获取抽取到的物品索引
        double nextDouble = Math.random();
        sortOrignalRates.add(nextDouble);
        Collections.sort(sortOrignalRates);

        return sortOrignalRates.indexOf(nextDouble);
    }

}
抽奖
    //根据活动id抽奖
public LuckDrawActivityPrizeRel winPrize(Long luckDrawActivityId) {
//查询抽奖活动所有奖品
        List prizeRelList = prizeRelService.list(new LambdaQueryWrapper()
                .eq(LuckDrawActivityPrizeRel::getLuckActivityConfigId, configId));
        if (prizeRelList == null) {
            throw new BizException("未创建奖品");
        }
        List orignalRates = new ArrayList(prizeRelList.size());
        for (LuckDrawActivityPrizeRel gift : prizeRelList) {
            double probability = ((double) gift.getProbability() / 100);//这里创建奖品概率填的是两位数不是小数,所以除以100
            if (probability < 0) {
                probability = 0;
            }
            orignalRates.add(probability);
        }
        //抽奖奖品索引
        int orignalIndex = LotteryUtil.lottery(orignalRates);
        //根据索引获取中奖奖品
        LuckDrawActivityPrizeRel winPrize = prizeRelList.get(orignalIndex);
       
        return winPrize;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855204.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号