Vấn đề số thứ tự Magento


9

Tôi gặp vấn đề lạ với Số thứ tự trong Magento.

Gần đây khi một đơn hàng được đặt trên trang web của tôi, số Đơn đặt hàng đã đến 100000350, Lý tưởng nhất là 100000370số đơn đặt hàng trước đó của tôi 100000369100000367. Tôi đã đính kèm ảnh chụp màn hình bên dưới cho nó

Ảnh chụp màn hình số thứ tự

Hơn nữa, tôi đã kiểm tra các bản ghi lỗi nhưng không tìm thấy bất kỳ mục nào của nó. Chúng tôi đang sử dụng SagePay và PayPal làm cổng thanh toán cho nó.

Bất cứ ai có thể hướng dẫn tôi về điều này?


Tôi có thể thấy rõ rằng bạn đã cài đặt bất kỳ mô-đun nào liên quan để đặt hàng vì điều này sẽ phát sinh vấn đề,
Keyul Shah

Không có mô-đun nào liên quan đến đơn hàng .. mô-đun bên thứ ba duy nhất chúng tôi đang sử dụng là Ebizmarts_SagePay, Mass_ SẢNt_Relater, TBT_Enhancegrid và Sphinix Search
Dexter

1
Không có vấn đề gì lớn, một người nào đó có tài khoản khách hàng gần như đã hoàn thành một đơn đặt hàng đến điểm được gửi để thanh toán, đã được chỉ định số Đơn đặt hàng và sau đó từ bỏ giỏ hàng trong một khoảng thời gian. Xảy ra mọi lúc ... Bạn đã nhận được đơn đặt hàng, xin chúc mừng, đã hoàn thành đơn hàng thay vì từ bỏ.
Phòng thí nghiệm Fiasco

Tôi nghĩ rằng bạn đã không có câu hỏi của tôi
Dexter

1
@huzefam - Vui lòng tham gia với nhóm thiết kế Magento hoặc tạo cột tự động nối tiếp của riêng bạn mà bạn đã khóa cho ERP của mình trên Magento SO đã hoàn thành. Vâng, tôi hiểu từ góc độ kiểm toán nếu thiếu số hóa đơn, có hanky-panky. Magento dường như đã đưa ra lập trường rằng không phải tất cả các đơn đặt hàng là hợp lệ, do đó thiếu số SO không phải là vấn đề lớn. Tôi cũng hiểu rằng một số hệ thống kế toán, khu vực pháp lý của chính phủ cũng cảm thấy giống như vậy về Đơn đặt hàng và mong muốn có một bản kiểm toán cho thấy các đơn hàng bị vô hiệu trong một chuỗi nối tiếp hoàn chỉnh.
Phòng thí nghiệm Fiasco

Câu trả lời:


28

Lần đầu tiên tôi nhận được một số thứ tự, chúng tôi đã bất ngờ và mất tinh thần cho đến khi tôi biết được chuyện gì đang xảy ra. Nó liên quan đến cách Magento phân bổ số lượng Đơn đặt hàng.

Hoàn toàn bình thường khi có một chuỗi như vậy, trước các số được phân bổ hiện tại và cũ hơn một tháng. Bí mật của nó là một khách hàng đã đăng nhập không hoàn thành đơn hàng sau một giai đoạn quan trọng nhất định, đã quay lại, đăng nhập và quyết định cuối cùng mua.

Báo giá với số Đơn đặt hàng được phân bổ sử dụng số đó cho số Đơn đặt hàng bán.

Bây giờ để giải thích.

Quy trình đặt hàng Magento tạo ra một trích dẫn lần đầu tiên một cái gì đó được thêm vào giỏ hàng.

  • Đối với khách hàng của khách, báo giá này kéo dài miễn là phiên của họ chưa hết thời gian, tại thời điểm đó nó tồn tại trong cơ sở dữ liệu, nhưng không thể phục hồi được bởi khách hàng.
  • Khi một khách hàng đã đăng ký đăng nhập, báo giá giỏ hàng được chỉ định id khách hàng của họ để giỏ hàng tồn tại miễn là khách hàng không làm trống nó và được khách hàng đã đăng ký truy xuất bằng cách đăng nhập vào tài khoản của họ.

Tại thời điểm này, báo giá chỉ là một Đơn đặt hàng tiềm năng . Nó không có số được chỉ định vì khách hàng không cam kết trả tiền cho nó.

Khi khách hàng nhấp vào nút Tiến hành để thanh toán, họ sẽ:

  • hoặc được đăng nhập trước để bắt đầu giỏ hàng
  • hoặc nếu không đăng nhập, hỏi xem họ có muốn đăng ký hoặc trả phòng với tư cách là khách không.

Điều gì sau đây là một chút quan trọng: Các khách hàng chọn đăng ký vào giỏ hàng được coi là khách hàng cho đến khi đơn hàng được hoàn thành và họ đến trang thành công, tại thời điểm tài khoản của họ được tạo và họ đã đăng nhập. vẫn là một báo giá của khách hàng với thời gian hết hàng trong giỏ hàng nếu đơn hàng chưa hoàn thành và một trang thành công được hiển thị.

Với một đơn đặt hàng thẻ tín dụng, điều sau đây xảy ra khi nhấp vào nút Đặt hàng .

  • Thông tin thẻ tín dụng, thông tin địa chỉ thanh toán, tổng số giỏ hàng và thông tin đặt hàng được lắp ráp
  • Số đơn đặt hàng được chỉ định cho báo giá này ( sales_flat_quotebảng trong reserved_order_idcột)
  • Gói dữ liệu được gửi đến cổng thẻ tín dụng để ủy quyền / đầu tư tiền để thanh toán cho đơn đặt hàng.
  • Bộ xử lý giỏ tín dụng quay trở lại:
    • hoặc ủy quyền / thu tiền với thông tin giao dịch phù hợp sẽ được ghi lại
    • hoặc từ chối thanh toán với thông tin phù hợp về lý do tại sao ủy quyền / bắt giữ bị từ chối.
  • Với ủy quyền / nắm bắt thành công, báo giá được chuyển đổi thành Đơn đặt hàng và nếu đây là đăng ký giỏ hàng, tài khoản khách hàng sẽ được tạo.

Nếu giao dịch thẻ tín dụng bị từ chối đối với bất kỳ khách hàng nào bởi cổng thanh toán thẻ tín dụng và khách hàng tiếp theo đặt hàng thành công , sẽ có một sự bỏ qua trong chuỗi số Đơn đặt hàng do thanh toán bị từ chối Đơn đặt hàng được chỉ định và Đơn đặt hàng thành công sau đây được chỉ định số có sẵn tiếp theo.

Đối với giỏ hàng của khách (đơn đặt hàng của khách và đăng ký không thành công trong khách hàng giỏ hàng) vượt quá thời gian chờ phiên, số Đơn đặt hàng được bảo lưu này sẽ bị mất khi hết phiên, để lại các khoảng trống trong chuỗi Đơn hàng.

Đối với những khách hàng đã đăng nhập trước khi nhấp vào nút Tiến hành , báo giá được gán id khách hàng, vì vậy nếu họ cố gắng đặt hàng và thấy rằng nó bị từ chối, họ có thể quay lại, đăng nhập, tìm giỏ hàng vẫn có nội dung và đặt đặt hàng, đôi khi muộn hơn nhiều (dài nhất đến nay là bốn tháng). Báo giá sẽ sử dụng số Đơn đặt hàng được dành riêng được chỉ định, dẫn đến số thứ tự Đơn hàng bán hàng hiển thị trong màn hình quản lý Đơn đặt hàng của bạn.


Để kiểm tra mục đích, tôi giả vờ bị kẹt trong thanh toán bằng cách không chọn phương thức thanh toán và cuối cùng đóng trình duyệt (trên máy tính đã mở trang web + thanh toán trước). và trong khi đó đã hoàn thành thứ tự máy tính thứ hai (sẽ nhận được mức tăng ID tiếp theo). Kết quả là nó không nhảy qua số. Nếu nó hoạt động theo cách đó thì nó đã thêm một ID không được sử dụng giữa đơn hàng 10 và đơn hàng 11 mà nó không hoạt động. Theo thông tin của bạn, tôi đã cố gắng xác minh và thực hiện chính xác điều bạn đang chỉ định nhưng nó không đưa ra đầu ra.
Siva

Thay vào đó, nếu khách hàng thất bại trong Cổng thanh toán, nó sẽ hiển thị dưới dạng thanh toán đang chờ xử lý hoặc bị hủy và nếu đơn hàng bị thất bại trong phần cuối của thanh toán thì nó sẽ không hiển thị (và chỉ tiếp tục với ID chính xác trong sự nối tiếp). Vì vậy, bây giờ, tôi bối rối với điều này. Xin hãy giúp tôi hiểu tại sao số thứ tự bỏ qua ngẫu nhiên. Cảm ơn
Siva

Giải thích tuyệt vời.
Wolfack

2

Tôi đã phải đối mặt với cùng một vấn đề nhưng chỉ đến khi máy chủ bị tấn công với một lượng tải khổng lồ. Sự cố này xảy ra do db chuyển sang trạng thái khóa trong khi chuyển đổi báo giá thành thứ tự. Khi kiểm tra thêm, tôi phát hiện ra rằng vấn đề là nó đã cố ghi vào bảng sales_flat_order_grid trong giao dịch ngay sau khi chèn vào bảng sales_flat_order. Với các truy vấn đồng thời, nó gây ra va chạm khóa. Giải pháp thực sự là chuyển nội dung của sales_flat_order_grid ra khỏi giao dịch.

Liên kết giúp tôi hiểu vấn đề

Các bản vá đã giải quyết vấn đề cho tôi.

Bạn phải xóa chức năng _afterSave khỏi Mage_Sales_Model_Ab bát và thêm

public function afterCommitCallback(){
    if (!$this->getForceUpdateGridRecords()) {
         $this->_getResource()->updateGridRecords($this->getId());
     }
    parent::afterCommitCallback();
}

Hãy cho tôi biết nếu nó giải quyết vấn đề cho bạn.


Có ai đã thử phương pháp này như đã nói của Shaily chưa?
Siva

0

Tôi không chắc chắn, nhưng điều này có thể giải quyết vấn đề của bạn:

Theo tôi nghĩ, một cái gì đó có thể đã làm phiền eav_entity_storebảng của bạn . Nó chứa thông tin về gia tăng tiếp theo tức là order_id sẽ sử dụng. Có thể một số mô-đun hoặc mã trong hệ thống magento của bạn có thể đã thay đổi nó.

Mở bảng này và cập nhật số tăng_last_id coloumn với id đơn hàng cuối cùng của bạn. Hãy cẩn thận, nó chứa id gia tăng của người khác cũng như hóa đơn, giao hàng, v.v ... Để chắc chắn, chỉ cần đi đến eav_entity_typesbảng và xem những gì entity_type_idcho sales/order(cột entity_model). Trong magento của tôi, nó là 5. Vì vậy, bây giờ hãy vào eav_entity_storebảng và chỉ cần cập nhật số gia tăng cho hàng có entity_type_id5. Bạn có thể cập nhật trực tiếp qua phpmyadmin hoặc bạn có thể chạy truy vấn như,

update eav_entity_store set increment_last_id = 'your_last_order_id' where entity_type_id = 5; 

Xin lưu ý 5 là entity_type_id trong magento của tôi để đặt hàng

Có thể có nhiều lý do cho vấn đề của bạn, nhưng tôi nghĩ điều này có thể giải quyết vấn đề của bạn.


Cảm ơn .. nhưng đã kiểm tra bảng và nó có id gia tăng chính xác
Dexter

id đơn hàng tối đa (không phải mới nhất) của bạn trong bán hàng quản trị -> đơn hàng là gì? Đặt giá trị đó vào bảng tôi đã nói .. đặt lệnh kiểm tra và kiểm tra ..
Pradeep
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.