作者:大米的感悟_673 | 来源:互联网 | 2022-04-27 21:30
本文示例为大家分享了Java抽奖抢购算法,供大家参考,具体内容如下
应用场景
单件奖品抢购(可限时)
多件奖品按概率中奖(可限时、可不限量)
代码实现
表结构:
--抽奖设置
create table AWARD_INFO
(
ID NUMBER(11) not null,
ACT_ID NUMBER(11), --活动ID
NUM NUMBER(11), --奖品总量(0为不限量)
REST NUMBER(11), --奖品余量
ODDS NUMBER(11) default 0, --中奖概率
START_DATE DATE, --开始日期(可为空)
END_DATE DATE, --结束日期(可为空)
PRODUCT_ID NUMBER(11), --奖品ID
STATE NUMBER(5) default 0, --状态 0-有效 1-失效
INFO_TYPE NUMBER(5) default 0 --0-正常
);
alter table AWARD_INFO
add constraint PK_AWARD_INFO primary key (ID);
--中奖纪录
create table AWARD_LOG
(
id number(11),
act_id number(11), --活动ID
get_time date, --中奖时间
product_id number(11), --奖品ID
num number(11) default 1, --中奖数量
person varchar2(50), --中奖人
info_id number(11), --抽奖设置ID
state number(5) --状态 0-有效 1-失效
);
alter table AWARD_LOG
add constraint PK_AWARD_LOG primary key (ID);
代码:
public static class AwardResult{
public int ret; //返回结果
public int logId; //AWARD_LOG id
}
/**
* 抽奖算法
* @param actId 抽奖活动ID
* @param person 抽奖人
* @param productId 奖品ID -1则为该活动ID下所有奖品
* @param excludeId 排除奖品ID -1 则不排除,与productId不能同时>0
* @param checkDate 是否检查时间
* @return -1 没有抽奖数据;-2 奖品已抽完; -3 其他错误;>=0 中奖productId; -4 排除id
* @throws Exception
*/
public static AwardResult getAwardFull(int actId, String person, int productId, int[] excludeIds, boolean checkDate) throws SQLException{
AwardResult result = new AwardResult();
Connection cOnn= JDBC.getConnection();
conn.setAutoCommit(false);
try{
List
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。