Этот пример разделяет алгоритм Rush Java Lottery для вашей ссылки. Конкретный контент заключается в следующем
Сценарии приложения
Покупка призов с одной частью (ограниченное время)
Многочисленные призы выиграли случайно (ограниченное время, нет лимита)
Реализация кода
Структура таблицы:
-Настройки-настройки Создать таблицу ward_info (идентификационный номер (11) не нулевой, номер act_id (11),-идентификационное число (11),-Тотальные призы (0-неограниченное количество) Номер отдыха (11),-Количество пособий по цене (11) По умолчанию 0, цена. -Номер состояния идентификатора цы. ALTER TABLE AWARD_INFO Добавить ограничение PK_AWARD_INFO Первичный ключ (ID); --Winning record create table AWARD_LOG( id number(11), act_id number(11), --Activity ID get_time date, --Winning time product_id number(11), --Price ID number(11) default 1, --Winning number person varchar2(50), --Winner info_id number(11), --Raffle Setting ID state number(5) --Status 0-valid 1-invalid);alter table AWARD_LOG add ограничение PK_AWARD_LOG Первичный ключ (ID);
Код:
Public Static Class AwardResult {public int ret; // вернуть результат public int logid; //AWARD_LOG id } /** * Luck draw algorithm* @param actId Luck draw activity ID * @param person Luck draw person* @param productId Prize ID -1 is all prizes under the activity ID* @param excludeId Exclude prize ID -1 is not excluded, and cannot be simultaneously with productId>0 * @param checkDate Whether to check the time* @return -1 There is no lottery data; -2 приз был привлечен; -3 Другие ошибки; > = 0 выигрышного продукта; -4 исключить ID * @Throws Exception */ public Static AwardResult getAwardfull (int actid, String Person, int productId, int [] exklideids, boolean checkdate) Throws Sqlexception {warderResult result = new AwardResult (); Соединение conn = jdbc.getConnection (); conn.setautocommit (false); try {list <map <string, object >> rows; String SQL; String checkdatestest = ""; String basesql = "select t.id, t.product_id, t.num, t.rest, t.odds, t.info_type от Award_info t, где t.act_id =? И t.state = 0"; if (checkDate) {checkDatestR = "и t.start_date <= sysdate и t.end_date> = sysdate"; } if (productId> 0) {// snap sql = basesql + "и t.product_id =?" + checkDatest + "для обновления"; rows = jdbc.getrows (sql, new Object [] {actid, productId}, conn); } else {// Все элементы рисуют для активности sql = basesql + checkdatest + "для обновления"; rows = jdbc.getrows (sql, new Object [] {actid}, conn); } if (row.isempty ()) {// Нет рисовать log.info ("без рисования data actid = {} person = {} productid = {} excludeids = {} checkdate = {}", actid, productId, excludeids, checkDate); conn.commit (); result.ret = -1; результат возврата; } int Infoid = -1; int getProductId = -1; int num = -1; int rest = -1; if (row.size () == 1) {// snap num = ((номер) rows.get (0) .get ("num")). intvalue (); REST = ((номер) Rows.Get (0) .Get ("REST")). IntValue (); Infoid = ((номер) Rows.get (0) .get ("id")). Intvalue (); getProductId = ((номер) Rows.get (0) .get ("product_id")). intvalue (); } else {// rull draw int [] [] temp = new int [rows.size ()] [3]; int sum = -1; int i = 0; for (int k = 0; k <rous.size (); k ++) {// Установить призовой фонд int antds = ((BigDecimal) Rows.get (k) .get ("antds")). intvalue (); sum ++; Temp [i] [0] = sum; // Начальное значение sum = sum + antds; Temp [i] [1] = sum; // конечное значение температура [i] [2] = k; // строки индекс i ++; } // Roll Draw Random Random = new Random (); int r = random.nextint (sum + 1); int j = 0; for (int k = 0; k <i; k ++) {if (r> = temp [k] [0] && r <= temp [k] [1]) {j = k; перерыв; }} Infoid = ((BigDecimal) Rows.get (temp [j] [2]). get ("id")). Intvalue (); getProductId = ((BigDeciMal) Rows.Get (temp [j] [2]). get ("product_id")). Intvalue (); num = ((номер) Rows.Get (temp [j] [2]). get ("num")). intValue (); REST = ((номер) ROWS.GET (TEMP [J] [2]). GET ("REST")). IntValue (); } // Судить, исключить ли ID if if (arrayutils.contains (excludeids, getProductId)) {log.info ("is exclude id actid = {} person = {} productId = {} excludeIds = {} ceckDate = {}", Actid, productId, excludeids, charchdate); conn.commit (); result.ret = -4; результат возврата; } // Недостаточный запас if (num> 0 && rest <= 0) {log.info («Приз был очищен actid = {} person = {} productId = {} excludeIDS = {} checkDate = {}", ActId, productId, excludeids, checkDate); Jdbc.commit (conn); result.ret = -2; результат возврата; } // Обновление записи приза if (num> 0) {// не ограничен SQL = "Обновление Award_Info SET REST = REST - 1 где id =?"; Jdbc.update (sql, новый объект [] {Infoid}, conn); } // Записать список победителей log = new Awardlog (); log.setactid (actid); log.setnum (1); log.setperson (человек); log.setProductId (getProductId); log.setinfoid (Infoid); Number logid = log.save (conn); if (logid == null) {бросить новое sqlexception ("Сохранить ward_log error"); } result.logid = logid.intvalue (); conn.commit (); result.ret = getProductId; результат возврата; } catch (sqlexception e) {log.error ("getaward error", e); conn.rollback (); } наконец {jdbc.close (conn); } result.ret = -3; результат возврата; }Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.