Kami berharap ketika seseorang membeli, periksa apakah jumlah produk sudah cukup. Jika ada surplus dalam inventaris, maka pengguna akan dapat berhasil membelinya, dan kemudian mengubah inventaris. Jika pengguna mengantri untuk membeli satu per satu, tentu saja tidak ada masalah.
Namun pada kenyataannya, mungkin banyak pengguna datang untuk membeli secara bersamaan dan memeriksa inventaris pada saat yang sama. Ini mungkin bahwa inventaris hanya cukup bagi salah satu dari mereka untuk dibeli, tetapi karena inventaris belum dikurangi, beberapa orang akan berhasil membelinya, dan kemudian inventaris akan dikurangi menjadi negatif dan dijual. Ini sangat mungkin terjadi ketika sejumlah besar pengguna membeli secara bersamaan pada saat yang sama.
Jadi kami menyesuaikan pesanan. Ketika beberapa pengguna membeli, pertama -tama kami mengurangi inventaris. Maka Anda harus bertanya, bagaimana cara menguranginya? Apakah itu juga akan berkurang ketika inventaris tidak cukup untuk satu orang?
Kami berasumsi bahwa setiap produk memiliki kode pembelian yang unik (sudah dibuat sebelumnya sebelum memulai pembelian), dan jumlah kode pembelian yang diambil pengguna adalah jumlah salinan yang ia beli. Kemudian ketika pengguna membeli, langkah pertama kami adalah mengubah status kode keberuntungan dari valid menjadi tidak valid, dan menandai dengan ID pembeli.
Salinan kode adalah sebagai berikut: "Perbarui` lottery_number` set `status` = status tidak valid,` user_id` = ID pengguna pembeli, `current_time` = timestamp di mana` goods_id` = ID produk yang direbut dan `status` = batas status yang valid yang dibeli salinan";
Dengan cara ini, MySQL akan memberi kita hasil pengembalian, yang disebut mempengaruhi jumlah baris, yang berarti bahwa pernyataan ini memperbarui data berapa banyak baris yang dipengaruhi. Ini mempengaruhi jumlah baris adalah jumlah salinan produk yang sebenarnya dibeli. Jika jumlah baris adalah 0, itu berarti tidak ada salinan yang berhasil dibeli, yang berarti bahwa produk telah terburu -buru untuk membeli.
Implementasi Java:
/** * Hasilkan kode pembelian produk <masukkan sejumlah besar data> * * @param goodsissue * @author nifury */public void insertlotterynumbers (goodsissue goodsissue) {string prefix = "masukkan ke` lottery_number`, `goods_id`,` periode`, `lottery_number`,` goods_id`, `periode`,` lottery_number`, `` `,` ``, `` `,` `` `` `` `` ``, ``, ``, ``, ``, `` `,` `` `` `` `` `` `` `` `` `` `` `,` ``, `` `,` pali Period_, /N"; Timestamp sekarang = stempel waktu baru (System.currentTimeMillis ()); Koneksi con = null; coba {con = jdbctemplate.getDataSource (). getConnection (); con.setautocommit (false); Disiapkan pst = con.preparestatement (""); Total Long = Goodsissue.GettotalShare (); // Jumlah total pengunjung untuk (int i = 0; i <total; i += 10000) {// 10.000 pengiriman setelah stringBuffer sufiks = stringBuffer baru (); Daftar <Integer> number = new ArrayList <Integer> (); untuk (int j = 0; j <10000 && i+j <total; j ++) {numbers.add (10000001+i+j); } Collections.shuffle (angka); // perebutan kode keberuntungan untuk (int n = 0, length = numbers.size (); n <length; n ++) {suffix.append ("(" + goodsissue.getgoodsid () + "," + goodsissue.getperioDs () + "," + get.get (n) + "," "nower.) () (') (') (') (') (') (') (') (') (') (') (') (') (') (') (') (') (n) +", ') (') (n) + "," goodsissue.getissueId () + ")/n,"); } // Bangun string SQL lengkap SQL = awalan + sufiks.substring (0, suffix.length () - 2); pst.addbatch (SQL); pst.executebatch (); con.commit (); } con.setAutocommit (true); // kembalikan pst.close (); con.close (); } catch (Exception e) {E.PrintStackTrace (); coba {// transaksi rollback con.rollback (); con.setautocommit (true); con.close (); } catch (sqlexception e1) {e1.printstacktrace (); }// Memulihkan }}Tetapkan kode pembelian (bisnis kami perlu menampilkan kode pembelian kepada pembeli, jadi ada pengembalian)
/** * Secara acak dapatkan kode pembelian melalui Product edem_ID (setiap produk memiliki edisi_id per edisi unik) (kode pembelian yang digunakan akan diatur ke status tidak valid) * @param edemid * @param Jumlah jumlah kode pembelian yang akan diperoleh * @param userid * @return lotterynumber Daftar objek * @Author nifury 2016-7-72 jumlah, long userId) {list <lotterynumber> numberList = new ArrayList <lotterynumber> (); coba {long currenttime = system.currentTimeMillis (); String updateUserId = "perbarui` lottery_number` set `status` = 0,` user_id` =?, `Current_time` =? Di mana` edite_id` =? Dan `status` = 1 batas?"; int rownum = jdbctemplate.update (updateUserId, userid, currentTime, outsentId, jumlah); if (rownum> 0) {// Masih ada kode pembelian yang valid kiri dan kanan? Object [] buyArgs = {edoneId, userid, currentTime}; numberList = jdbctemplate.query (kueri + "di mana` edo edite_id` =? dan `status` = 0 dan` user_id` =? dan `current_time` =?", buyArgs, lotterynumberMapper); }} catch (deadlockloserDataAccessException e) { System.out.println ("-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------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.