Dieses Beispiel teilt den Java Lottery Rush -Algorithmus für Ihre Referenz. Der spezifische Inhalt ist wie folgt
Anwendungsszenarien
Einteiliger Preiskauf (begrenzte Zeit)
Mehrere Preise wurden zufällig gewonnen (begrenzte Zeit, keine Grenze)
Code -Implementierung
Tabellenstruktur:
-Raffeleinstellungen erstellen table Award_info (ID-Nummer (11) nicht null, ACT_ID-Nummer (11),-Aktivitäts-ID-Nummer (11), -Totale Preise (0 ist unbegrenzt) REST-NUMPER (11),-PRICE-Zulassungs-Nr. -PRICE ID-Status Nummer (5) Standard 0,-Status 0-Valid 1-Vierfache info_type Nummer (5) Standard 0-0-Normal); Alter table Award_info Hinzufügen von Einschränkungen PK_AWARD_INFO Primärschlüssel (ID); -Gewinner-Datensatz erstellen table Award_log (ID-Nummer (11), ACT_ID-Nummer (11),-Aktivitäts-ID get_time Datum,-Gewinner-Zeit-Produkt_ID-Nummer (11),-PRICE ID-Nummer (11) Standardeinstellung 1,-Gewinnungsnummer Person varchar2 (50),--Gewinner info_id Number (11),--Raffle-ID-ID-Nummer). Einschränkung pk_award_log primärer Key (ID) hinzufügen;
Code:
public static class preectResult {public int ret; // Return Ergebnis Public int logid; // Award_log id} /*** Luck Draw Algorithmus* @Param Actid Luck Draw Aktivitäts -ID* @param Person Luck Draw Person* @param ProductID -Preis -ID -1 ist alle Preise unter der Aktivitäts -ID* @param exkludeId exklude Preis -id -1 ist nicht ausgeschlossen, und es kann nicht gleichzeitig mit ProductID> 0* @Param -Data @@Param -Daten prüfen. -2 Der Preis wurde gezogen; -3 andere Fehler; > = 0 Gewinn produktid; -4 Ausschließen von ID * @throws Exception */ public static AwardResult getAwardfull (int actid, String Person, int productId, int [] exkluedIDs, boolean checkdate) löscht SQLEXception {AwardResult -Ergebnis = new AwardResult (); Verbindung conn = jdbc.getConnection (); conn.setAutocommit (false); Versuchen Sie {list <map <String, Objekt >> Zeilen; String SQL; String checkdatestr = ""; String baseSQL = "Select T.ID, T.Product_id, T.Num, T.Rest, T.odds, T.Info_Type von Award_info t wonach t.act_id =? Und T.State = 0"; if (checkDate) {utedatestr = "und t.start_date <= sysdate und t.end_date> = sysdate"; } if (productId> 0) {// snap sql = baseSql + "und t.product_id =?" + checkDATESTR + "Für Aktualisierung"; rows = jdbc.getrows (SQL, neues Objekt [] {actid, productId}, conn); } else {// alle Elemente zeichnen für Aktivität SQL = BASSQL + checkDATESTR + "für Update"; rows = jdbc.getrows (SQL, neues Objekt [] {actid}, conn); } if (rows.isempty ()) {// no data log.info ("no data actid = {} person = {} productId = {} exkluedIDS = {} checkDate = {}", actid, person, productId, exkludeIds, checkdate); conn.commit (); result.ret = -1; Rückgabeergebnis; } infoid = -1; int getProductid = -1; int num = -1; int rest = -1; if (rows.size () == 1) {// snap num = ((number) rows.get (0) .get ("num")). intValue (); rest = ((number) Zeilen.get (0) .get ("rest")). intValue (); Infoid = ((Zahl) Zeilen.get (0) .get ("id")). intValue (); getProductid = ((number) Zeilen.get (0) .get ("product_id")). intValue (); } else {// rull zeichnen int [] [] temp = new int [rows.size ()] [3]; int sum = -1; int i = 0; für (int k = 0; k <rows.size (); k ++) {// Setzen Sie den Preispool int odds = ((bigDecimal) rows.get (k) .get ("odds"). intValue (); sum ++; temp [i] [0] = sum; // Startwert Summe = Summe + Odds; temp [i] [1] = sum; // Endwerttemp [i] [2] = k; // Zeilenindex i ++; } // rollen zeichnen randal random = new randal (); int r = random.nextint (sum + 1); int j = 0; für (int k = 0; k <i; k ++) {if (r> = temp [k] [0] && r <= temp [k] [1]) {j = k; brechen; }} Infoid = ((bigDecimal) Zeilen.get (temp [j] [2]). get ("id")). intValue (); getProductid = ((bigDecimal) Zeilen.get (temp [j] [2]). get ("product_id")). intValue (); num = ((number) Zeilen.get (temp [j] [2]). get ("num")). intValue (); rest = ((number) Zeilen.get (temp [j] [2]). get ("rest")). intValue (); } //Judge whether to exclude id if(ArrayUtils.contains(excludeIds, getProductId)){ log.info(" is the exclude ID actId={} person={} productId={} excludeIds={} checkDate={}", actId, person, productId, excludeIds, checkDate); conn.commit (); result.ret = -4; Rückgabeergebnis; } // Unzureichende Aktien if (num> 0 && rElruhen Sie <= 0) {log.info ("Der Preis wurde gelöscht. Jdbc.commit (conn); result.ret = -2; Rückgabeergebnis; } // Aktualisieren Sie den Preisdatensatz if (Num> 0) {// nicht unbegrenzt sql = "awpa awpa_info set rast = rest - 1 WO ID =?"; Jdbc.update (SQL, neues Objekt [] {Infoid}, conn); } // Die Liste der Gewinnerpraxis log = new Awardlog () aufzeichnen; log.setactId (actid); log.setnum (1); log.setperson (Person); log.setProductId (getProductId); log.setInfoid (Infoid); Number logid = log.save (conn); if (logId == null) {neue SQLEXception ("Award_log -Fehler speichern"); } result.logid = logid.intValue (); conn.commit (); result.ret = getProductId; Rückgabeergebnis; } catch (sqlexception e) {log.Error ("getAward -Fehler", e); conn.rollback (); } endlich {jdbc.close (conn); } result.ret = -3; Rückgabeergebnis; }Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.