2009-08-31 13 views
10

मैं वर्तमान में PHP/MySQL के साथ एक ईकॉमर्स साइट बना रहा हूं। हाल ही में, मैं शॉपिंग कार्ट एकीकरण पर काम कर रहा हूं। ग्राहक यह सुनिश्चित करना चाहता था कि स्टॉक संभावित खरीदारों के लिए उपलब्ध था, इसलिए मैंने स्टॉक प्रबंधन प्रणाली बनाई। शॉपिंग कार्ट निम्नानुसार काम करता है:शॉपिंग कार्ट और स्टॉक प्रबंधन

  • ग्राहक अपनी गाड़ी पर एक आइटम की मात्रा जोड़ता है।
  • आइटम मात्रा डेटाबेस में उपलब्ध स्टॉक से आरक्षित है।
  • कोई और आरक्षित स्टॉक खरीद सकता है।
  • स्टॉक प्रक्रिया आदेश तक तब तक आरक्षित रहता है - जहां स्टॉक डेटाबेस से हटा दिया जाता है।
  • यदि ग्राहक अपने कार्ट को छोड़ देता है, तो स्टॉक आरक्षित रहता है।
  • यदि कोई अन्य ग्राहक कोई आइटम खरीदना चाहता है, लेकिन केवल उपलब्ध स्टॉक किसी अन्य ग्राहक द्वारा आरक्षित है, तो क्लाइंट आरक्षित स्टॉक चुरा सकता है यदि यह 20 मिनट के लिए निष्क्रिय है।

मेरा सवाल है, इस तरह के परिदृश्य के लिए सर्वोत्तम अभ्यास क्या हैं? क्या मैं यह सही ढंग से कर रहा हूँ? मुख्य बात यह है कि ग्राहक उस स्टॉक को बेचना नहीं चाहता जो उसके पास नहीं है।

मैं इस बात पर चर्चा करना चाहता हूं कि कार्यक्षमता में सुधार कैसे किया जाए, या अन्य इसे पूरा करने के लिए क्या कर रहे हैं।

उत्तर

14

एक वैकल्पिक दृष्टिकोण शॉपिंग कार्ट में डालकर स्टॉक को आरक्षित नहीं करना है। प्रत्येक पृष्ठ को फिर से लोड होने पर चेक करें, क्या आइटम अब और उपलब्ध नहीं होना चाहिए, "जिस आइटम को आप खरीदना चाहते हैं उसे अभी बेचा गया है। यह जल्द ही उपलब्ध होगा"। और आप शॉपिंग कार्ट से उत्पाद को हटा देते हैं।

अब, भुगतान भुगतान शुरू करने से पहले आपको बिल्कुल शॉपिंग कार्ट सामग्री आरक्षित करना होगा, फिर या तो उसे स्टॉक से हटा दें या भुगतान की सफलता/विफलता के आधार पर रिजर्व को हटा दें। आप इसे एक कोड चलाने में बेहतर करते हैं, ताकि आरक्षित यथासंभव संक्षिप्त रूप से रहता है।

ProcessOrder() 
{ 
    bool reserved = ReserveShoppingCartContents(); 
    if (reserved) 
    { 
     bool paymentStatus = ProcessPayment(); 
     if (paymentStatus) 
      RemoveShoppingCartContentsFromStock(); 
     else 
      ReleaseShoppingCartReserve(); 
    } 
    else 
    { 
     RefreshShoppingCartContents(); // Remove positions or adjust quantities 
     MessageBox ("Could not reserve your shopping cart contents. Please check out your selection"); 
    } 
} 

आपका रिजर्व ब्रीफ़र रहता है, उतना अधिक संभावना है कि आपका आइटम वास्तव में बेचा जाएगा। आप एक संघर्ष की संभावना को कम करते हैं: ग्राहक ए शॉपिंग कार्ट से शुरू होता है, आइटम आरक्षित हो जाता है, ग्राहक बी आता है, यह देखता है कि आइटम स्टॉक पर नहीं है और चला जाता है, ग्राहक ए निर्णय लेता है कि उसे कीमत पसंद नहीं है और ऑपरेशन रद्द कर देता है। आपके पास दो संभावित ग्राहक थे लेकिन वे भी बेच नहीं सके।

+0

सलाह के लिए धन्यवाद। मैं कार्यक्षमता को फिर से काम करने जा रहा हूं। मुझे पता था कि ऐसा करने के लिए यह सबसे अच्छा तरीका नहीं था। फ्रीजिंग स्टॉक शायद एक अच्छा विचार नहीं है, जब तक कि कॉन्सर्ट टिकट जैसे अद्वितीय उत्पाद बेचते हैं। – jgallant

+0

हां, स्रोत नियंत्रण और डेटाबेस लेनदेन के साथ, आशावादी लॉकिंग के लिए डिफ़ॉल्ट जब तक कि आपके पास अन्यथा करने का कोई अच्छा कारण न हो। – Jerph

3

मैं चेकआउट प्रोसेस के दौरान पृष्ठों के प्रत्येक रीलोड पर स्टॉक के लिए चेक करता हूं और आइटम को बेचे जाने की प्रक्रिया के दौरान उन्हें एक त्रुटि संदेश के साथ कार्ट पेज पर रीडायरेक्ट करता हूं। स्टॉक केवल की पुष्टि के आदेश पर कम हो गया है, अगर आदेश रद्द हो जाता है तो भी मैं स्टॉक को पुनर्स्थापित करता हूं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^