文章彙整

Magento 2 客製訂單編號

By Steffi 2 months agoNo Comments
首頁  /  Magento  /  Magento-2  /  Magento 2 客製訂單編號

Magento 2 客製訂單編號

一般而言,訂單編號的產生會以流水號的方式遞增。而在實務上,有時編號會需要照特定格式去遞增。Magento的訂單編號有一固定公式,足以在一般慣用的格式範圍內,達到客製訂單編號的需求。

首先,我們先了解Magento訂單編號的組成要素:

項目 存放位置
前綴

prefix

資料表 sales_sequence_profile.prefix
後綴

suffix

資料表 sales_sequence_profile.suffix
目前流水序

sequence_value

資料表 sequence_order_{parameter}.sequence_value的最大值
起始值

start_value

資料表 sales_sequence_profile.start_value
跳號間距

step

資料表 sales_sequence_profile.step
位數

padded to Xdigits

程式檔案 module-sales-sequence/Model/Sequence.php 裏的常數DEFAULT_PATTERN

 

一個完整的訂單編號會由以下公式產生:

increment_id = prefix + ((sequence_valuestart_value) * step + start_value) {padded to Xdigits} + suffix

此公式亦適用於invoice編號, shipment編號, credit memo編號,唯一差異僅在於sequence_value存放資料表分別為 sequence_invoice_{parameter}, sequence_shipment_{parameter}, sequence_creditmemo_{parameter}.

 

這裡我們模擬某商店(store_id=1)在資料庫的相關資料:

TABLE sales_sequence_meta
meta_id entity_type store_id sequence_table
5 order 1 sequence_order_1
6 invoice 1 sequence_invoice_1
7 creditmemo 1 sequence_creditmemo_1
8 shipment 1 sequence_shipment_1

 

在sales_sequence_meta資料表中,store_id 1 對應到的資料範圍為meta_id = 5 ~ 8. 針對訂單編號,這裡要抓取meta_id=5的值.

TABLE sales_sequence_profile
profile_id meta_id prefix suffix start_value step max_value warning_value is_active
5 5 P S 1 1 4294967295 4294966295 1
6 6 NULL NULL 1 1 4294967295 4294966295 1
7 7 NULL NULL 1 1 4294967295 4294966295 1
8 8 NULL NULL 1 1 4294967295 4294966295 1

 

根據sales_sequence_meta的關聯查詢,在sales_sequence_profile資料表中,訂單編號的資料要抓取meta_id=5的值.

TABLE sequence_order_1
sequence_value
1
2
3

 
根據sales_sequence_meta的關聯查詢,訂單編號的流水號資料表為 sequence_order_1,從sequence_order_1得到最新的流水號為3.

在取得公式所需的參數值後,即可帶入公式得出下一個訂單編號

 

‘P’ + ((3 – 1) * 1+ 1) {padded to 9 digits} + ‘S’ = P000000004S

 

瞭解了編號的產生方式,接著來看幾個依據需求客製編號的釋例。

 

Case A.

針對 store_id 為 1 的商店,其訂單編號加上前綴 OD,且起始編號由200000000開始.

  • 取得訂單編號規則的meta_id

SELECT `meta_id` FROM `sales_sequence_meta` WHERE `store_id` = ‘1’ AND `entity_type` = ‘order’;

  • 訂單編號規則異動SQL

UPDATE `sales_sequence_profile` SET `prefix` = ‘OD` AND `start_value` = ‘200000000’ WHERE `meta_id` = ‘{query_order_meta_result.meta_id}’;

 

Case B.

針對 store_id 為 3 的商店,其發票編號間隔為10,訂單編號加上後綴9.

  • 取得發票編號規則的meta_id

SELECT `meta_id` FROM `sales_sequence_meta` WHERE `store_id` = ‘3’ AND `entity_type` = ‘invoice’;

  • 發票編號規則異動SQL

UPDATE `sales_sequence_profile` SET `step` = ‘10’ WHERE `meta_id`=’{query_invoice_meta_result.meta_id}’;

  • 取得訂單編號規則的meta_id

SELECT `meta_id` FROM `sales_sequence_meta` WHERE `store_id` = ‘3’ AND `entity_type` = ‘order’;

  • 訂單編號規則異動SQL

UPDATE `sales_sequence_profile` SET `suffix`=’9’ WHERE `meta_id`=’{query_order_meta_result.meta_id}’;

 

以上例子皆是透過簡單的資料庫設定即可達到客制需求.如果今天想要的客製跳脫了公式範圍,又該如何實踐呢?
我們已知編號產生的程式位置在Magento\SalesSequence\Model\Sequence::getCurrentValue,因此,可以在繼承該類別的前提下新自己的Sequence類別,並在自己的類別下客制方法getCurrentValue,接著透過di.xml[https://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html]的設定去注入. 雖然這樣幾乎可以達到完全自由的客製,在此卻要特別提醒,一旦使用依賴注入,在安裝其他extension時,需要注意是否存在覆蓋衝突而造成功能損壞. 因此我們仍建議盡量在既有公式的規則下去客製訂單編號喔!

以上就是這次關於如何在Magento 2 客製化訂單編號的分享,更多電商營運與架站的知識,歡迎訂閱歐斯瑞電子報,以及追蹤我們的Facebook粉絲專頁

 

延伸閱讀:

Magento 訂單項目狀態解說

Magento2 訂單管理

 

參考來源:https://www.classyllama.com/blog/m2-incrementid

 

 

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Category:
  Magento-2

留下回應

你的電子郵件地址不會被公開.

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

每月發送電商戰略指南,只要填寫E-mail即可訂閱!

請到您的信箱確認,即可完成訂閱。