يشارك هذا المثال خوارزمية Java Lottery Rush للرجوع إليها. المحتوى المحدد كما يلي
سيناريوهات التطبيق
شراء الجائزة أحادية القطعة (وقت محدود)
جوائز متعددة فازت بالصدفة (وقت محدود ، لا حد)
تنفيذ الكود
هيكل الجدول:
-إعدادات الإقامة ، قم بإنشاء جائزة جدول الجائزة _info (رقم الهوية (11) ليس فارغًا ، رقم ACT_ID (11) ،-رقم معرف النشاط رقم (11) ،-جوائز توتال (0 غير محدودة) رقم الراحة (11) ،-رقم احتمالات البدل (11) -رقم حالة المعرف في السعر (5) الافتراضي 0 ،-status 0-valid 1-info info_type رقم (5) الافتراضي 0-0-normal) ؛ ALTER TABLE AWARD_INFO أضف القيد PK_AWARD_INFO المفتاح الأساسي (ID) ؛ -السجل الحائز على السجل إنشاء جائزة الجائزة _log (رقم المعرف (11) ، رقم ACT_ID (11) ،-معرف النشاط Get_time Date ،-عدد الزمن الفائز بمنتج_د رقم (11) ،-رقم معرف الإعداد (11) الافتراضي 1 ،-رقم الفوز بالرقم (5) ، تغيير الجدول (5). إضافة القيد pk_award_log المفتاح الأساسي (معرف) ؛
شفرة:
جائزة الطبقة الثابتة العامة {public int ret ؛ // نتيجة الإرجاع العامة int logid ؛ // award_log id} /*** Luck رسم خوارزمية* param actiD Luck Draw Draw Activity id* param person luck profire* param productiD id -1 هي جميع الجوائز تحت معرف النشاط* param assudiD aspressed aspture -1 لا يمكن استبعادها ، ولا يمكن أن يكون ذلك في وقت واحد مع productid> 0* param checkdate ما إذا لم يكن هناك ما إذا لم يكن الأمر كذلك ؛ -2 تم رسم الجائزة ؛ -3 أخطاء أخرى ؛ > = 0 الفوز ProductId ؛ -4 استبعاد ID * Throws استثناء */ جائزة ثابتة عامة GetAwardfull (int actID ، string ، int productID ، int [] excludeids ، boolean checkdate) يلقي sqlexception {awardresult result = new AwardResult () ؛ connect conn = jdbc.getConnection () ؛ conn.setautocommit (false) ؛ جرب {list <map <string ، Object >> الصفوف ؛ سلسلة SQL ؛ سلسلة checkDatester = "" ؛ 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) {checkDatester = "و t.start_date <= sysdate و t.end_date> = sysdate" ؛ } if (productId> 0) {// snap sql = basesql + "و t.product_id =؟" + checkDatester + "for Update" ؛ الصفوف = jdbc.getRows (sql ، كائن جديد [] {actId ، productId} ، conn) ؛ } آخر {// جميع العناصر يرسم للنشاط sql = basesql + checkDatester + "for Update" ؛ الصفوف = jdbc.getRows (sql ، كائن جديد [] {actId} ، conn) ؛ } if (rows.isempty ()) {// no draw data log.info ("no draw data actId = {} person = {} productId = {} excludeids = {} checkDate = {{}" ، actID ، productID ، asprodids ، checkdate) ؛ conn.Commit () ؛ النتيجة. ret = -1 ؛ نتيجة العودة } int 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 = ((رقم) صفوف. infoid = ((number) rows.get (0) .get ("id")). Intvalue () ؛ getProductId = ((رقم) صفوف. } else {// rull draw int [] [] temp = new int [rows.size ()] [3] ؛ int sum = -1 ؛ int i = 0 ؛ لـ (int k = 0 ؛ k <rows.size () ؛ k ++) {// قم بتعيين pool pool indds = ((bigDecimal) rows.get (k) .get ("Odds")). Intvalue () ؛ SUM ++ ؛ درجة الحرارة [i] [0] = sum ؛ // START VALUE SUM = SUM + ODDS ؛ درجة الحرارة [i] [1] = sum ؛ // درجة حرارة القيمة النهائية [i] [2] = k ؛ // index index i ++ ؛ } // roll draw عشوائي عشوائي = جديد عشوائي () ؛ int r = random.nextint (sum + 1) ؛ int j = 0 ؛ لـ (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 = ((number) rows.get (temp [j] [2]). get ("num")). Intvalue () ؛ REST = ((رقم) صفوف. }. conn.Commit () ؛ النتيجة. نتيجة العودة }. JDBC.Commit (conn) ؛ النتيجة. ret = -2 ؛ نتيجة العودة }. jdbc.update (sql ، كائن جديد [] {infoid} ، conn) ؛ } // سجل قائمة السجل الفائز بالفائزين = جائزة جديدة () ؛ log.setactid (actID) ؛ log.setnum (1) ؛ log.setperson (شخص) ؛ log.setProductId (getProductId) ؛ log.setInfoid (infoid) ؛ رقم logid = log.save (conn) ؛ if (logid == null) {رمي sqlexception جديد ("Save Award_Log Error") ؛ } result.logid = logid.intvalue () ؛ conn.Commit () ؛ النتيجة. نتيجة العودة } catch (sqlexception e) {log.error ("getaward error" ، e) ؛ conn.rollback () ؛ } أخيرًا {jdbc.close (conn) ؛ } result.ret = -3 ؛ نتيجة العودة }ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.