Contoh ini berbagi algoritma Java Lottery Rush untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Skenario Aplikasi
Pembelian Hadiah Single-Piece (Waktu Terbatas)
Beberapa hadiah dimenangkan secara kebetulan (waktu terbatas, tidak ada batasan)
Implementasi Kode
Struktur Tabel:
-Pengaturan Raffle Buat tabel penghargaan_info (Nomor ID (11) bukan null, act_id Number (11),-Activity ID NUM NUM (11), --Total Hadiah (0 tidak terbatas) Nomor REST (11), --Ind-number odds (11) Default 0,-Pria Pria Mulai Tanggal Start_Date Date,-Start Date (Startance Date (Kosong Default) Default 0, Default Price Probabilitas Tanggal Start_Date Date,-Start Date (Startance Date (Kosong) Default) Default Default 0 DEPENTE DEPRECE Tanggal Start_Date Date,-Start Date (Startce Date (DEPAN DEPANCED) DEPANCED 0, DEPANDED DATANG KOMBE FRICE START_DATE DATE,-DATE TANGGAL DEPAN (11) -Nomor Status ID Price (5) Default 0, --Status 0-Valid 1-Vailable Info_type Number (5) Default 0 --0-normal); ubah tabel penghargaan_info Tambahkan kendala PK_AWARD_INFO Key Primary (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 Tambahkan Batasan PK_AWARD_LOG KUNCI PRIMER (ID);
Kode:
Public Static Class AwwardResult {public int ret; // Hasil Pengembalian Logid Publik Int; //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 Hadiah telah ditarik; -3 kesalahan lain; > = 0 Winning ProductID; -4 Kecualikan ID * @Throws Exception */ Public Static AwardResult getAwardfull (int actid, string person, int productId, int [] excludeids, boolean checkDate) melempar sqlexception {penghargaan hasil = penghargaan baru (); Koneksi conn = jdbc.getConnection (); Conn.setAutocommit (false); coba {list <peta <string, objek >> baris; String sql; String checkDateStr = ""; String baseesql = "pilih t.id, t.product_id, t.num, t.rest, t.odds, t.info_type dari penghargaan_info t di mana t.act_id =? Dan t.state = 0"; if (checkDate) {checkDateStr = "dan t.start_date <= sysdate dan t.end_date> = sysdate"; } if (productId> 0) {// snap sql = baseesql + "dan t.product_id =?" + checkDateStr + "untuk pembaruan"; baris = jdbc.getRows (sql, objek baru [] {actid, productId}, conn); } else {// Semua item menggambar untuk aktivitas sql = baseesql + checkDateStr + "untuk pembaruan"; baris = jdbc.getRows (sql, objek baru [] {actid}, conn); } if (rows.isempty ()) {// tidak ada gambar data log.info ("no draw data actid = {} person = {} productId = {} excudeDids = {} checkDate = {}", actid, orang, productId, tidak dikecualikan, checkDate); Conn.Commit (); result.ret = -1; hasil pengembalian; } int infoid = -1; int getProductId = -1; int num = -1; int istirahat = -1; if (rows.size () == 1) {// snap num = ((angka) baris.get (0) .get ("num")). intvalue (); rest = ((angka) baris.get (0) .get ("istirahat")). intvalue (); infoid = ((angka) baris.get (0) .get ("id")). intvalue (); getProductId = ((angka) baris.get (0) .get ("Product_id")). IntValue (); } else {// rull draw int [] [] temp = int int [rows.size ()] [3]; int sum = -1; int i = 0; untuk (int k = 0; k <rows.size (); k ++) {// Setel interaksi kumpulan hadiah = ((BigDecimal) Rows.get (k) .get ("odds")). intvalue (); jumlah ++; temp [i] [0] = sum; // Mulai nilai jumlah = jumlah + odds; temp [i] [1] = sum; // Nilai akhir temp [i] [2] = k; // Baris indeks i ++; } // roll Draw acak acak = acak baru (); int r = random.nextInt (jumlah + 1); int j = 0; untuk (int k = 0; k <i; k ++) {if (r> = temp [k] [0] && r <= temp [k] [1]) {j = k; merusak; }} infoid = ((BigDecimal) Rows.get (temp [j] [2]). get ("id")). intvalue (); getProductId = ((BigDecimal) Rows.get (temp [j] [2]). get ("product_id")). intvalue (); num = ((angka) baris.get (temp [j] [2]). get ("num")). intvalue (); rest = ((bilangan) baris.get (temp [j] [2]). get ("rest")). intvalue (); } // menilai apakah akan mengecualikan ID if (arrayutils.contains (excludeDids, getProductId)) {log.info ("adalah ID ActId = {} orang = {} productID = {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{,) Conn.Commit (); result.ret = -4; hasil pengembalian; } // stok yang tidak mencukupi jika (num> 0 && rest <= 0) {log.info ("Hadiah telah dibersihkan actId = {} person = {} productId = {} excleDeDids = {} checkDate = {}", actid, pribadi, productId, excudeids, checkDate); JDBC.Commit (Conn); result.ret = -2; hasil pengembalian; } // Perbarui catatan hadiah jika (num> 0) {// tidak tidak terbatas sql = "update penghargaan_info set rest = rest - 1 di mana id =?"; Jdbc.update (sql, objek baru [] {infoid}, conn); } // Catat daftar pemenang penghargaan log = new AwardLog (); log.setActId (actid); log.setnum (1); log.setperson (orang); log.setProductId (getProductId); log.setInfoid (infoid); Nomor LogID = LOG.Save (Conn); if (logid == null) {lempar sqlexception baru ("simpan penghargaan_log error"); } result.logid = logid.intvalue (); Conn.Commit (); result.ret = getProductId; hasil pengembalian; } catch (sqlexception e) {log.error ("getAward error", e); Conn.rollback (); } akhirnya {jdbc.close (conn); } result.ret = -3; hasil pengembalian; }Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.