訂單操作鎖定實現流程

2021-09-29 05:34:56 字數 812 閱讀 2247

最近專案中遇到乙個需求,是關於指揮中心處理案件的過程中同時操作表單,併發提交的問題,所有案件只能乙個人在同一流程下處理一次,不能出現重複流程,因為中心的坐席人員不是很多一般是10人以內,所以併發或者同時操作案件表單的可能性不太大,因此不需要處理高併發的問題。

1、如果有坐席已經開啟案件表單,其他坐席不能開啟該條記錄;

2、如果有坐席開啟表單,但是該使用者的電腦中間出現斷網,或者系統卡死崩潰的情況導致表單一直掛起時,應該結束該使用者操作的表單,其他坐席可以重新開啟。

3、所有更新過程都要判斷案件是否鎖定,鎖定則不操作。

服務端和客戶端通過訊息通訊機制實時的判斷使用者對表單的操作過程,目前支援web通訊的元件相對較多,也比較成熟,websocket、singlar等方式均可實現,今天我們選擇的是基於c#的singlar方式和web端進行通訊。

服務端實現

1、接收客戶端開啟訂單的提醒,表單加鎖。

2、服務端監聽客戶端傳送心跳的時間間隔,如果時間間隔超過設定的時間,將解鎖。

3、更新完成傳送標識給客戶端。

web客戶端實現

1、客戶端收到更新完成標識以後,即可重新整理列表。

2、客戶端開啟列表時先判斷訂單是否被加鎖,加鎖則不能開啟。

3、客戶端開啟訂單以後實時傳送通訊給服務端,傳送內容要有唯一性,一般就是工單編號;如果介面卡死或者斷網,超過規定時間,其他使用者開啟表單以後,當前使用者恢復聯網以後會主動退出當前任務。

4、客戶端提交時根據服務端返回的狀態,提示是否該訂單已被處理(解決多人同時提交時,正好繞開通訊間隙,最先提交的為最終操作成功者,防止重複提交)。

鎖定表操作

1.se11鎖物件查詢或者建立鎖物件,形式為e 表名等,如eytsn02,對應產生鎖定函式enqueue eytvin 解鎖函式equeue eytvin 2.呼叫函式鎖定表,並進行表操作,操作完成解鎖表 lock table ytvin call function enqueue eytvin e...

jquery實現表頭鎖定

前段時間做專案時候由於需要顯示乙個列表,但是由於資料太多在滾動的時候表頭必須凍結住,所以就寫了下面這個指令碼 曾經在網上也找過相應的指令碼,但是不怎麼理想所以就自己寫了,但是目前由於專案僅僅用到了表頭的凍結,而不需要指定列凍結所以目前只能算個不完整的指令碼,不過一般的僅僅需要表頭凍結就可以使用了 現...

扣減庫存策略採用訂單是否鎖定庫存方案

扣減庫存策略採用訂單是否鎖定庫存方案 在訂單系統中使用者下訂單流程中,有乙個重要環節是 扣減庫存 而此 扣減庫存 採用的策略是直接在乙個商品庫存欄位中的庫存資料減去訂單商品數量 如 update productstock set quantity quantity 1 where productid...