写了个简单的示例,可以根据自身项目需求补充业务代码
数据库表结构
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;
}