Wir hoffen, dass beim Kauf von jemandem prüfen, ob die Menge des Produkts ausreicht. Wenn der Inventar einen Überschuss enthält, kann der Benutzer ihn erfolgreich erwerben und dann das Inventar ändern. Wenn sich der Benutzer nacheinander anstellt, gibt es natürlich kein Problem.
In Wirklichkeit kann es jedoch sein, dass mehrere Benutzer gleichzeitig kaufen und das Inventar gleichzeitig überprüfen. Dies kann sein, dass das Inventar nur ausreicht, um einen von ihnen zu kaufen, aber da das Inventar nicht reduziert wurde, werden mehrere Personen es erfolgreich erwerben, und dann wird das Inventar auf negativ und überverkauft. Dies tritt sehr wahrscheinlich auf, wenn eine große Anzahl von Benutzern gleichzeitig gleichzeitig kaufen.
Also passen wir die Bestellung an. Wenn einige Benutzer kaufen, reduzieren wir zunächst das Inventar. Dann müssen Sie fragen, wie Sie es reduzieren können? Wird es sich auch verringern, wenn das Inventar für eine Person nicht ausreicht?
Wir gehen davon aus, dass jedes Produkt über einen eindeutigen Kaufcode (vor dem Start des Kaufs) verfügt, und die Anzahl der Kaufcodes, die der Benutzer erfasst, ist die Anzahl der von ihm gekauften Kopien. Wenn ein Benutzer dann kauft, besteht unser erster Schritt darin, den Status des glücklichen Code von gültig auf ungültig zu ändern und ihn mit seiner Käufer -ID zu markieren.
Die Codekopie lautet wie folgt: "Aktualisieren Sie` lottery_number` set `Status" = Ungültiger Status, `user_id` = Käufer -Benutzer -ID,` current_time` = timestamp wobei `goods_id` = Snatched Product ID und` Status "= gültiger Statuslimit gekaufte Kopien";
Auf diese Weise gibt uns MySQL ein Rückgabeergebnis, das bezeichnet wird und die Anzahl der Zeilen betrifft. Dies bedeutet, dass diese Anweisung die Daten darüber aktualisiert, wie viele Zeilen sie beeinflusst. Dies betrifft die Anzahl der Zeilen ist die Anzahl der Kopien des tatsächlich gekauften Produkts. Wenn die Anzahl der Zeilen 0 beträgt, bedeutet dies, dass keine Kopie erfolgreich gekauft wurde, was bedeutet, dass das Produkt zum Kauf gebracht wurde.
Java -Implementierung:
/** * Generieren Sie den Kaufcode des Produkts <Ein großer Datenmenge einfügen> * * @Param GoodSissue * @Author Nifury */public void InsertLotterynumbers (GoodSuse -Warenverguss) {String prefix = "Ins" lottery_number` (`goods_id`,`, `. /N"; TIMESTAMP NOW = neuer Zeitstempel (System.currentTimemillis ()); Verbindungs con = null; try {con = jdbctemplate.getDataSource (). getConnection (); con.setAutocommit (falsch); PrepedStatement pst = con.preparestatement (""); Long Total = GoodSISSue.gettotalShare (); // Gesamtzahl der Besucher für (int i = 0; i <insgesamt; i += 10000) {// 10.000 Einreichungen, sobald StringBuffer Suffix = new StringBuffer (); Liste <Ganzzahl> numbers = new ArrayList <Ganzzahl> (); für (int j = 0; j <10000 && i+j <total; j ++) {number.Add (10000001+i+j); } Collections.shuffle (nummern); // Scramble Lucky Code für (int n = 0, länge = numbers.size (); n <länge; n ++) {suffix.append ("(" + giodSeue.getGoodsid () + "," + goodSe. giodSISSue.getIssueid () + ")/n,"); } // Erstellen Sie die vollständige SQL -String SQL = Präfix + Suffix.substring (0, Suffix.length () - 2); pst.addbatch (SQL); pst.executebatch (); con.commit (); } con.setAutocommit (true); // restaure pst.close (); con.close (); } catch (Ausnahme e) {e.printstacktrace (); try {// Transaktionsrollback con.rollback (); con.setAutocommit (true); con.close (); } catch (sqlexception e1) {e1.printstacktrace (); }// Wiederherstellen }}Weisen Sie einen Kaufcode zu (unser Geschäft muss dem Käufer den Kaufcode vorstellen, sodass eine Rückgabe vorliegt).
/** * Holen Sie sich den Kaufcode zufällig über das Produkt probleme_id (jedes Produkt verfügt über ein eindeutiges Problem_ID pro Ausgabe) (der verwendete Kaufcode wird auf ungültigen Zustand gesetzt) * @param problemID * @param-Betrag Die Anzahl der zu erhaltenen Kaufcodes * @param userId * @return Lotterynumn-Objektliste * @Author Nifury 2016-22. userId) {list <Lotterynumber> numberlist = new ArrayList <Lotterynumber> (); try {long Currentime = system.currentTimemillis (); String updateUserid = "Aktualisieren Sie` lottery_number` set `status` = 0,` user_id` =? int rownum = jdbctemplate.update (UpdateUserID, userId, currentTime, problemID, Betrag); if (Rownum> 0) {// Es gibt noch gültige Kaufcodes links und rechts? Objekt [] buyargs = {problemID, userId, currentime}; numberlist = jdbctemplate.Query (Abfrage + "wobei` problem_id` =? und `status` = 0 und` user_id` =? und `current_time` =?“, buyargs, lotterynumbermapper); }} catch (DeadlockLoSerDataAccessexception e) { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------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.