เราหวังว่าเมื่อมีคนซื้อตรวจสอบว่าปริมาณของผลิตภัณฑ์เพียงพอหรือไม่ หากมีส่วนเกินในสินค้าคงคลังผู้ใช้จะสามารถซื้อได้สำเร็จแล้วเปลี่ยนสินค้าคงคลัง หากผู้ใช้คิวเพื่อซื้อทีละคนแน่นอนว่าไม่มีปัญหา
แต่ในความเป็นจริงอาจเป็นไปได้ว่าผู้ใช้หลายคนมาซื้อในเวลาเดียวกันและตรวจสอบสินค้าคงคลังในเวลาเดียวกัน นี่อาจเป็นไปได้ว่าสินค้าคงคลังนั้นเพียงพอสำหรับหนึ่งในนั้นที่จะซื้อ แต่เนื่องจากสินค้าคงคลังยังไม่ลดลงหลายคนจะซื้อได้สำเร็จและจากนั้นสินค้าคงคลังจะลดลงเป็นลบและขายเกิน สิ่งนี้มีแนวโน้มที่จะเกิดขึ้นเมื่อผู้ใช้จำนวนมากซื้อในเวลาเดียวกันในเวลาเดียวกัน
ดังนั้นเราจึงปรับคำสั่งซื้อ เมื่อผู้ใช้บางคนซื้อเราจะลดสินค้าคงคลังก่อน จากนั้นคุณต้องถามว่าจะลดได้อย่างไร? มันจะลดลงเมื่อสินค้าคงคลังไม่เพียงพอสำหรับคนคนหนึ่งหรือไม่?
เราคิดว่าแต่ละผลิตภัณฑ์มีรหัสการซื้อที่ไม่ซ้ำกัน (ทำล่วงหน้าก่อนเริ่มการซื้อ) และจำนวนรหัสการซื้อที่ผู้ใช้คว้าคือจำนวนสำเนาที่เขาซื้อ จากนั้นเมื่อผู้ใช้ซื้อขั้นตอนแรกของเราคือการเปลี่ยนสถานะของรหัสโชคดีจากที่ถูกต้องเป็นไม่ถูกต้องและทำเครื่องหมายด้วยรหัสผู้ซื้อ
การคัดลอกรหัสมีดังนี้: "อัปเดต` Lottery_number` set `สถานะ '= สถานะไม่ถูกต้อง` user_id` = รหัสผู้ใช้ผู้ซื้อ `current_time` = timestamp โดยที่` goods_id` = รหัสผลิตภัณฑ์ที่ snatched และ `สถานะ' = สถานะ จำกัด ที่ถูกต้อง
ด้วยวิธีนี้ MySQL จะให้ผลตอบแทนเราที่เรียกว่าส่งผลกระทบต่อจำนวนแถวซึ่งหมายความว่าคำสั่งนี้จะอัปเดตข้อมูลของจำนวนแถวที่มีผลกระทบ สิ่งนี้มีผลต่อจำนวนแถวคือจำนวนสำเนาของผลิตภัณฑ์ที่ซื้อจริง หากจำนวนแถวเป็น 0 นั่นหมายความว่าไม่มีการซื้อสำเนาสำเร็จซึ่งหมายความว่าผลิตภัณฑ์ได้ถูกรีบไปซื้อ
การใช้งาน Java:
/** * สร้างรหัสการซื้อของผลิตภัณฑ์ <แทรกข้อมูลจำนวนมาก> * * @param Goodsissue * @author nifury */โมฆะสาธารณะ insertlotterynumbers (goodsissue goodsissue) {string prefix = "แทรกเข้าไปใน` `` `` `` `` `` `` `` `` `` ` ค่า /n "; Timestamp Now = timestamp ใหม่ (System.currentTimeMillis ()); การเชื่อมต่อ con = null; ลอง {con = jdbctemplate.getDataSource (). getConnection (); Con.setAutocommit (เท็จ); PreparedStatement PST = con.prepareStatement (""); Long Total = GoodsIssue.getTotalShare (); // จำนวนผู้เข้าชมทั้งหมดสำหรับ (int i = 0; i <total; i += 10,000) {// 10,000 การส่งเมื่อ StringBuffer Suffix = new StringBuffer (); รายการ <จำนวนจำนวนเต็ม> ตัวเลข = arrayList ใหม่ <จำนวนเต็ม> (); สำหรับ (int j = 0; j <10000 && i+j <total; j ++) {numbers.add (1000001+i+j); } collections.shuffle (ตัวเลข); // scramble รหัสโชคดีสำหรับ (int n = 0, length = numbers.size (); n <ความยาว; n ++) {suffix.append ("(" + goodsissue.getgoodsid () + "," ghotisissue.getPeriods () + "," goodsissue.getissueId () + ")/n,"); } // สร้าง SQL String SQL ที่สมบูรณ์ = คำนำหน้า + คำต่อท้าย SUBSTRING (0, Suffix.length () - 2); pst.addbatch (SQL); pst.executeBatch (); Con.Commit (); } con.setautocommit (จริง); // คืนค่า pst.close (); con.close (); } catch (exception e) {e.printstacktrace (); ลอง {// การทำธุรกรรมย้อนกลับ con.rollback (); con.setautocommit (จริง); con.close (); } catch (sqlexception e1) {e1.printstacktrace (); }// คืนค่า }}กำหนดรหัสการซื้อ (ธุรกิจของเราจำเป็นต้องแสดงรหัสการซื้อให้กับผู้ซื้อดังนั้นจึงมีการส่งคืน)
/** * รับรหัสการซื้อแบบสุ่มผ่านผลิตภัณฑ์ itsition_id (แต่ละผลิตภัณฑ์มีปัญหาที่ไม่ซ้ำกันต่อฉบับ) (รหัสการซื้อที่ใช้จะถูกตั้งค่าเป็นสถานะที่ไม่ถูกต้อง) * @param itsueId * @param จำนวนรหัสการซื้อที่จะได้รับ * @param ผู้ใช้ จำนวนนาน, userId ยาว) {list <lotterynumber> numberList = arrayList ใหม่ <lotterynumber> (); ลอง {long currenttime = system.currentTimeMillis (); String updateUserId = "Update` Lottery_Number` Set `Status '= 0,` user_id` =?, `current_time` =? ที่ไหน` itsue_id` =? และ `สถานะ' = 1 ขีด จำกัด ?"; int rownum = jdbctemplate.update (updateUserId, userId, currenttime, itsueId, จำนวนเงิน); ถ้า (rownum> 0) {// ยังมีรหัสการซื้อที่ถูกต้องเหลืออยู่และขวา? วัตถุ [] buyArgs = {itsueId, userId, currenttime}; numberList = jdbctemplate.Query (แบบสอบถาม + "ที่ไหน` lexture_id` =? และ `สถานะ '= 0 และ` user_id` =? และ `current_time` =?", buyargs, lotterynumbermapper); }} catch (DeadlockloserDataAccessException e) { System.out.println ("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น