訂單處理筆記

2021-09-24 03:57:37 字數 1351 閱讀 5282

前言:系統中有很多各式各樣的商品,比如話費充值會有充值賬號,實物寄送類會有收貨資訊,酒店預定會有一些預定資訊…等等。這些屬性導致訂單型別不同,如何進行管理?(後台可以分開管理訂單,但前台需要向使用者展示統一的訂單管理頁。)

- 因為許多流程使用的是公共方法,故在以下地方,需要根據訂單型別來switch對映選擇不同的orderservice中的方法:

備註:如果操作訂單時需要讀取實時的訂單資訊(主要是訂單狀態),就必須加鎖。

訂單流程**重複率很高。

每新增一類訂單,需要在很多分散的地方新增訂單型別的對映,很容易遺漏,也不符合開閉原則。

基礎訂單處理實現類baseorderserviceimpl,實現上述方法,作為模板。將其宣告為抽象類,使用泛型表示傳入的orderdo和返回的ordervo,將不同型別訂單的處理細節開放給它們自己去實現,每乙個不同的地方,都呼叫乙個抽象方法。

每新增一類訂單,***serviceimpl都繼承baseorderserviceimpl、實現***service,根據自身訂單型別實現baseorderserviceimpl的抽象方法,這樣就可以復用相同流程了,獨有的方法自行定義在***service。

比如話費充值訂單

【或者使用@postconstruct註解定義乙個init()方法來進行service例項的註冊與匹配。】

超時自動取消的實現方式:使用定時任務。

定義乙個業務定時任務類businesstimertaskdo,[訂單型別,業務型別,指定執行時間,建立時間,實際執行時間]。

定義businesstimertaskservice類,包括啟動、停止、新增、執行4個方法,並建立乙個執行緒,專門用來查詢應該執行的業務任務列表,並呼叫執行方法,執行緒sleep時間即定時任務執行的間隔時間。

訂單建立時,向業務定時任務表中新增資料,標記好業務型別task_type(可與訂單型別一一對應),指定動作型別為自動取消訂單,設定指定執行時間為訂單的建立時間+可支付時間;執行時根據訂單型別呼叫各自的自動取消方法,並更新實際執行時間。

定時任務還可以用來做支付成功的後續非同步操作。每個訂單對應的業務型別下,可定義不同的動作型別,在各自orderservice中,執行定時任務方法[autoprocesstask]的實現裡用switch選擇。

由於禮券的使用是針對的商品,但系統中的商品是各式各樣的,故需要抽象出乙個標準商品類standardgoodsdo,有每種商品的唯一編碼,每次維護不同的商品時,也維護標準商品表。

建立訂單時,如需使用禮券,就傳入禮券碼,在各自的orderserviceimpl中實現獲取統一商品編碼的抽象方法,進行禮券計算操作。

訂單號的處理

自動編號會被人猜出來嫩 每天的下單量,每季度的下單量,每年的下單量.等於直接把 經營資料拱手他人.所以一般都是無法跟下單量直接掛鉤的單號 一 ecshop訂單號生成規則 function get order sn ecshop的訂單號是會重複,ecshop生成訂單號後會做判斷,如果訂單號重複則重新提...

IE訂單的列印處理辦法

在乙個 專案應用中我需要把客戶在網上下的訂單使用ie列印出來 首先必須控制訂單不能出現ie的頁首頁尾 需要使用scriptx 然後主要是控制訂單資料輸出用什麼辦法顯示出來,為了靈活的控制輸出效果,我這裡使用的是迴圈讀入資料 定購的商品 的辦法 下面的 是我使用的 public string myor...

使用延遲佇列處理失效訂單問題

在處理訂單過程中,如果乙個訂單生成之後,在特定時間內 比如15分鐘 沒有付款,那麼我們就要刪除這一筆訂單,釋放佔據的貨物資源。在這種場景下,最直觀的做法就是寫乙個定時job,每分鐘掃瞄一下資料庫的訂單表,如果訂單超過了15分鐘,那麼訂單狀態改為刪除,並且商品表數量要加1,因為剛剛刪除的訂單釋放了乙個...