نأمل أنه عندما يشتري شخص ما ، تحقق مما إذا كانت كمية المنتج كافية. إذا كان هناك فائض في المخزون ، فسيتمكن المستخدم من شرائه بنجاح ، ثم تغيير المخزون. إذا كان المستخدم يصطف لشراء واحدة تلو الأخرى ، فلا توجد مشكلة بالطبع.
ولكن في الواقع ، قد يكون هناك العديد من المستخدمين للشراء في نفس الوقت والتحقق من المخزون في نفس الوقت. قد يكون هذا أن المخزون لا يكفي فقط للشراء ، ولكن نظرًا لأن المخزون لم يتم تقليله ، فسيقوم العديد من الأشخاص بشراءه بنجاح ، ثم سيتم تقليل المخزون إلى السلبية والزيادة. من المحتمل جدًا أن يحدث هذا عندما يشتري عدد كبير من المستخدمين في نفس الوقت في نفس الوقت.
لذلك نحن نضبط الترتيب. عندما يشتري بعض المستخدمين ، نقوم أولاً بتخفيض المخزون. ثم يجب أن تسأل ، كيف تقلله؟ هل سيقلل أيضًا عندما لا يكون المخزون كافيًا لشخص واحد؟
نحن نفترض أن كل منتج لديه رمز شراء فريد (مصنوع مسبقًا قبل بدء الشراء) ، وعدد رموز الشراء التي يمسكها المستخدم هو عدد النسخ التي اشتراها. ثم عند شراء المستخدم ، فإن خطوتنا الأولى هي تغيير حالة الكود المحظوظ من صالح إلى غير صالح ، وتمييزه بمعرف المشتري الخاص به.
نسخة التعليمات البرمجية هي كما يلي: "تحديث` lottery_number` set `status` = حالة غير صالحة ،` user_id` = معرف مستخدم المشتري ، `current_time` = timestamp حيث` goods_id` = معرف المنتج المختطف و `الحالة` = حد الحالة الصالحة للنسخ المشتراة "؛
وبهذه الطريقة ، ستمنحنا MySQL نتيجة عائد ، تسمى التأثير على عدد الصفوف ، مما يعني أن هذا البيان يقوم بتحديث بيانات عدد الصفوف التي تؤثر عليها. هذا يؤثر على عدد الصفوف هو عدد نسخ المنتج الذي اشترته بالفعل. إذا كان عدد الصفوف 0 ، فهذا يعني أنه لم يتم شراء أي نسخة بنجاح ، مما يعني أنه تم نقل المنتج للشراء.
تنفيذ جافا:
/** * قم بإنشاء رمز الشراء للمنتج <أدخل كمية كبيرة من البيانات> * * param goodsisisue * author nifury */public void insertlotterynumbers (goodsissue goodsisisue) {string prefix = /n "؛ الطابع الزمني الآن = طابع زمني جديد (System.CurrentTimeMillis ()) ؛ الاتصال con = null ؛ حاول {con = jdbctemplate.getDataSource (). getConnection () ؛ consetautocommit (false) ؛ reparedStatement PST = con.preparestatement ("") ؛ TOTAL Long = goodisissue.getTotalShare () ؛ // إجمالي عدد الزوار لـ (int i = 0 ؛ i <total ؛ i += 10000) {// 10،000 summissions بمجرد احتمال stringbuffer = new StringBuffer () ؛ قائمة <integer> number = new ArrayList <integer> () ؛ لـ (int j = 0 ؛ j <10000 && i+j <total ؛ j ++) {number.add (10000001+i+j) ؛ } collections.shuffle (number) ؛ // scramble lucky code for (int n = 0 ، length = number.size () ؛ n <length ؛ n ++) {fuck.append ("(" + goodsissue.getgoodsid () + "،" + goodsissue.getperiods () + "،" + gruments.get (n) + ". goodissue.getissueid () + ")/n ،") ؛ }. pst.addbatch (SQL) ؛ pst.executeBatch () ؛ con.Commit () ؛ } consetautocommit (true) ؛ // استعادة pst.close () ؛ con.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ جرب {// معاملات التراجع con.rollback () ؛ consetautocommit (صواب) ؛ con.close () ؛ } catch (sqlexception e1) {e1.printStackTrace () ؛ }// يعيد }}تعيين رمز شراء (يحتاج أعمالنا إلى إظهار رمز الشراء للمشتري ، لذلك هناك عائد)
/** * احصل بشكل عشوائي من رمز الشراء من خلال product isplease_id (كل منتج له مشكلة فريدة من نوعها) (سيتم ضبط رمز الشراء المستخدم على حالة غير صالحة) * param issueid * @param عدد رموز الشراء المراد الحصول عليها * param userid * QueryBynober list * @author nifury nifury 2016-7-22 * المبلغ ، long userId) {list <Litterynumber> numberList = new ArrayList <Lotterynumber> () ؛ حاول {long currenttime = system.currentTimeMillis () ؛ String updateUserId = "Update` Lottery_Number` Set `status` = 0 ،` user_id` =؟ ، `current_time` =؟ أين` quesp_id` =؟ و `status` = 1 limit؟" ؛ int rownum = jdbctemplate.update (UpdateUserId ، userId ، currenttime ، issueD ، المبلغ) ؛ if (rownum> 0) {// لا يزال هناك رموز شراء صالحة اليسار واليمين؟ object [] buyArgs = {issueid ، userId ، currenttime} ؛ numberlist = jdbctemplate.query (Query + "أين` issue_id` =؟ و `status` = 0 و` user_id` =؟ و `current_time` =؟" ، buyargs ، lotterynumbermapper) ؛ }} catch (deadlockloserDataAccessexception e) { System.out.println ("-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.