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