多条告白如次剧本只需引入一次
概括
名目开拓中常常会有抽奖如许的经营销售震动的需要,比方:积分大天桥、刮刮乐、赌博机之类多种情势,本来后盾的实行本领是一律的,正文引见一种常用的抽奖实行本领。
所有抽奖进程囊括以次几个上面:
奖品奖品池抽奖算法奖品控制奖品散发奖品
奖品囊括奖品、奖品几率和控制、奖品记载。
奖品表:
CREATE TABLE `points_luck_draw_prize` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL COMMENT '奖品称呼', `url` varchar(50) DEFAULT NULL COMMENT '图片地方', `value` varchar(20) DEFAULT NULL, `type` tinyint(4) DEFAULT NULL COMMENT '典型1:红包2:积分3:领会金4:感谢光顾5:自设置', `status` tinyint(4) DEFAULT NULL COMMENT '状况', `is_del` bit(1) DEFAULT NULL COMMENT '能否简略', `position` int(5) DEFAULT NULL COMMENT '场所', `phase` int(10) DEFAULT NULL COMMENT '期数', `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=164 DEFAULT CHARSET=utf8mb4 COMMENT='奖品表';奖品几率控制表:
CREATE TABLE `points_luck_draw_probability` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `points_prize_id` bigint(20) DEFAULT NULL COMMENT '奖品ID', `points_prize_phase` int(10) DEFAULT NULL COMMENT '奖品期数', `probability` float(4,2) DEFAULT NULL COMMENT '几率', `frozen` int(11) DEFAULT NULL COMMENT '商品抽中后的冷冻度数', `prize_day_max_times` int(11) DEFAULT NULL COMMENT '该商品平台每天最多抽中的度数', `user_prize_month_max_times` int(11) DEFAULT NULL COMMENT '每位用户每月最多抽中该商品的度数', `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=114 DEFAULT CHARSET=utf8mb4 COMMENT='抽奖几率控制表';奖品记载表:
CREATE TABLE `points_luck_draw_record` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `member_id` bigint(20) DEFAULT NULL COMMENT '用户ID', `member_mobile` varchar(11) DEFAULT NULL COMMENT '中奖用户大哥大号', `points` int(11) DEFAULT NULL COMMENT '耗费积分', `prize_id` bigint(20) DEFAULT NULL COMMENT '奖品ID', `result` smallint(4) DEFAULT NULL COMMENT '1:中奖 2:未中奖', `month` varchar(10) DEFAULT NULL COMMENT '中奖月份', `daily` date DEFAULT NULL COMMENT '中奖日子(不囊括功夫)', `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3078 DEFAULT CHARSET=utf8mb4 COMMENT='抽奖记载表';奖品池
奖品池是按照奖品的几率和控制组建成的抽奖用的池子。重要囊括奖品的总池值和每个奖品所占的池值(分为发端值和中断值)两个维度。最新口试题整治好了,点击Java口试库小步调在线刷题。
奖品的总池值:一切奖品池值的总和。每个奖品的池值:算法不妨灵活,常用的有以次两种办法 :奖品的几率*10000(保护是平头)奖品的几率10000奖品的结余数目奖品池bean:
public class PrizePool implements Serializable{ /** * 总池值 */ private int total; /** * 池中的奖品 */ private List<PrizePoolBean> poolBeanList;}池中的奖品bean:
public class PrizePoolBean implements Serializable{ /** * 数据库中如实奖品的ID */ private Long id; /** * 奖品的发端池值 */ private int begin; /** * 奖品的中断池值 */ private int end;}奖品池的组建代码:
/** * 获得超等大财主的奖品池 * @param zillionaireProductMap 超等大财主奖品map * @param flag true:有现款 false:无现款 * @return */ private PrizePool getZillionairePrizePool(Map<Long, ActivityProduct> zillionaireProductMap, boolean flag) { //总的奖品池值 int total = 0; List<P