多條告白如次劇本只需引入一次
概括
名目開拓中常常會有抽獎如許的經營銷售震動的需要,比方:積分大天橋、刮刮樂、賭博機之類多種情勢,本來后盾的實行本領是一律的,正文引見一種常用的抽獎實行本領。
所有抽獎進程囊括以次幾個上面:
獎品獎品池抽獎算法獎品控制獎品散發獎品
獎品囊括獎品、獎品幾率和控制、獎品記載。
獎品表:
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