java 简单实现转盘

写了个简单的示例,可以根据自身项目需求补充业务代码

数据库表结构

CREATE TABLE `turnplate_config` (
  `config_id` int NOT NULL AUTO_INCREMENT COMMENT '转盘id',
  `reward_figure` decimal(55,2) DEFAULT NULL COMMENT '奖励数量',
  `percenti` decimal(11,2) DEFAULT NULL COMMENT '概率百分比',
  `sort` int DEFAULT NULL COMMENT '排序',
  `image_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '转盘图片',
  PRIMARY KEY (`config_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

实体类

@Data
@ToString
public class TurnplateConfig {

    /**
     * 转盘id
     * default value: null
     */
    @TableId(type = IdType.AUTO)
    private Integer configId;

    /**
     * 数字
     * default value: null
     */
    @ApiModelProperty(value = "奖励")
    private BigDecimal rewardFigure;

    /**
     * 百分比
     * default value: null
     */
    @ApiModelProperty(value = "百分比")
    private BigDecimal percenti;

    /**
     * 排序
     * default value: null
     */
    @ApiModelProperty(value = "排序")
    private Integer sort;

    /**
     * 图片
     * default value: null
     */
    @ApiModelProperty(value = "图片")
    private String imageUrl;

}

此处还要创建

TurnplateConfigMapper,

TurnplateService,

TurnplateServiceImpl,

TurnplateController

我就省略了

实现代码

    @Override
    public Object openTheTurntable() {
        //根据自身产品补充逻辑
        //获取转盘结果
        TurnplateConfig turnplateConfig = getTurntableConfiguration();
        //返回转盘结果
        return turnplateConfig;
    }


    /**
     * 获取转盘结果
     *
     * @return
     */
    private TurnplateConfig getTurntableConfiguration() {
        //获取转盘配置
        List<TurnplateConfig> list = turnplateConfigMapper.selectList(new LambdaQueryWrapper<TurnplateConfig>());
        List<TurnplateConfig> turnplateConfigs = new ArrayList<>();
        //随机数
        BigDecimal prob = randomNumber();
        int index = 0;
        TurnplateConfig turnplateConfig = new TurnplateConfig();
        BigDecimal probability = BigDecimal.ZERO;
        for (TurnplateConfig config : list) {
            BigDecimal endProbability = probability.add(config.getPercenti());
            if (probability.compareTo(prob) < 1 && prob.compareTo(endProbability) < 1) {
                turnplateConfigs.add(config);
                //随机取出符合条件的配置
                index = new Random().nextInt(turnplateConfigs.size());
                turnplateConfig = turnplateConfigs.get(index);
                break;
            }
            //拿到概率相加
            probability = probability.add(config.getPercenti());
        }
        return turnplateConfig;
    }


    /**
     * 随机数获取
     */
    private BigDecimal randomNumber() {
        //随机数
        Double number = (Math.random() * 100) + 0.0001;
        DecimalFormat df = new DecimalFormat("0.0000");
        String str = df.format(number);
        BigDecimal prob = new BigDecimal(str);
        return prob;
    }

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值