Cet exemple partage l'algorithme Java Lottery Rush pour votre référence. Le contenu spécifique est le suivant
Scénarios d'application
Achat de prix monobloc (temps limité)
Plusieurs prix gagnés par hasard (temps limité, pas de limite)
Implémentation de code
Structure du tableau:
- Paramètres de raffle Créer une table primes_info (numéro d'identification (11) non nul, numéro ACT_ID (11), –Activity ID num numéro (11), - ongles prix (0 est illimité) REST NUMBER (11), - - Price Odds Number (11) Default 0, - - Price Probability Start_Date Date, - PRODUCTE - Price ID Numéro d'état (5) par défaut 0, --status 0-valide 1-actualible info_type numéro (5) par défaut 0 --0-normal); alter table primes_info Ajouter une contrainte PK_AWARD_INFO Clé primaire (ID); - Vente gagnante Créer une table primes_log (numéro d'identification (11), numéro ACT_ID (11), –Activity ID Get_time Date, - Time Winning Product_id Number (11), --Price Numéro d'identification (11) Par défaut 1, - Numéro gagnant Personne VarChar2 (50), - Winner Info_id Number (11), - Raffle ID State Number (5) - STATUS 0-VALID 1-Invalid) contrainte pk_award_log clé primaire (id);
Code:
Classe statique publique Awards RawerResult {public int ret; // Retour Résultat public int logId; // Award_log ID} / ** * Luck Draw Algorithm * @param Actid Luck Draw ID d'activité * @param personne Luck Draw Person * @param Productid Prize ID -1 est tous des prix sous l'id d'activité * @param exclusid exclure le prix ID -1 n'est pas exclu le délai * @retrned -1 il n'y a pas de données lottery; -2 Le prix a été tiré; -3 autres erreurs; > = 0 ProductId gagnant; -4 exclure ID * @throws exception * / public static primesResult getAwardfull (int actid, string personne, int productId, int [] excluds, boolean checkdate) lève sqlexception {primesResult result = new priwerResult (); Connexion conn = jdbc.getConnection (); Conn.SetAutoCommit (false); essayez {list <map <string, objet >> lignes; String SQL; String CheckDatestr = ""; String basesql = "Select t.id, t.product_id, t.num, t.rest, t.odds, t.info_type de primes_info t où t.act_id =? Et t.state = 0"; if (checkDate) {checkDatestr = "et t.start_date <= sysdate et t.end_date> = sysdate"; } if (productId> 0) {// snap sql = basesql + "et t.product_id =?" + CheckDatestr + "pour la mise à jour"; Rows = JDBC.GetRows (SQL, nouvel objet [] {Actid, ProductId}, Conn); } else {// Tous les éléments dessines pour l'activité sql = basesql + checkDatestr + "pour la mise à jour"; Rows = JDBC.GetRows (SQL, nouvel objet [] {Actid}, Conn); } if (wows.isempty ()) {// no draw data log.info ("no draw data actid = {} personne = {} productId = {} excluds = {} checkDate = {}", actid, personne, productid, exclusids, checkdate); Conn.Commit (); résultat.RET = -1; Résultat de retour; } int infoid = -1; int getProductid = -1; int num = -1; int repos = -1; if (rows.size () == 1) {// snap num = ((nombre) Rows.get (0) .get ("num")). intValue (); rest = ((nombre) Rows.get (0) .get ("rest")). intValue (); infoid = ((nombre) Rows.get (0) .get ("id")). intValue (); getProductId = ((Number) Rows.get (0) .get ("product_id")). intValue (); } else {// rull draw int [] [] temp = new int [wows.size ()] [3]; int sum = -1; int i = 0; pour (int k = 0; k <rows.size (); k ++) {// définir le calice int codes = ((bigdecimal) wows.get (k) .get ("cotes")). intValue (); sum ++; temp [i] [0] = sum; // Démarrer la valeur SUM = SUM + cotes; temp [i] [1] = sum; // Tempère de valeur finale [i] [2] = k; // index de lignes 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; casser; }} infoid = ((bigdecimal) wows.get (temp [j] [2]). get ("id")). intValue (); getProductId = ((bigdecimal) Rows.get (temp [j] [2]). get ("product_id")). intValue (); num = ((nombre) Rows.get (temp [j] [2]). get ("num")). intValue (); reste = ((nombre) Rows.get (temp [j] [2]). get ("rest")). intValue (); } // juger s'il faut exclure id if (arrayutils.contains (excluds, getProductid)) {log.info ("est l'id excluant actid = {} personne = {} productid = {} excluds = {} checkdate = {}", actid, personne, productid, exclusids, checkdate); Conn.Commit (); result.ret = -4; Résultat de retour; } // Stock insuffisant if (num> 0 && rest <= 0) {log.info ("Le prix a été effacé ACTID = {} personne = {} productid = {} exclusids = {} checkDate = {}", actid, personne, productid, exclusides, checkdate); JDBC.Commit (Conn); result.ret = -2; Résultat de retour; } // Mettez à jour l'enregistrement du prix if (num> 0) {// pas illimité sql = "update lord_info set rest = rest - 1 where id =?"; JDBC.Update (SQL, nouvel objet [] {Infoid}, Conn); } // Enregistrer la liste des gagnants Log Log = new primesLog (); log.setAtid (actid); log.setnum (1); Log.SetPerson (personne); log.setProductId (getProductid); Log.setInfoid (Infoid); Numéro LogId = Log.Save (Conn); if (logId == null) {lancer une nouvelle sqlexception ("Save priwer_log error"); } result.logid = logId.intValue (); Conn.Commit (); result.ret = getProductid; Résultat de retour; } catch (sqlexception e) {log.Error ("Error GetAward", e); Conn.rollback (); } enfin {jdbc.close (Conn); } result.ret = -3; Résultat de retour; }Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.