午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

基于BPMN錯誤邊界事件的業(yè)務單據(jù)處理方法與系統(tǒng)與流程

文檔序號:39526643發(fā)布日期:2024-09-27 17:03閱讀:37來源:國知局
基于BPMN錯誤邊界事件的業(yè)務單據(jù)處理方法與系統(tǒng)與流程

本發(fā)明涉及工作流數(shù)據(jù)處理,特別涉及一種基于bpmn錯誤邊界事件的業(yè)務單據(jù)處理方法與系統(tǒng)。


背景技術:

1、當前,越來越多的業(yè)務場景使用基于業(yè)務流程建模符號bpmn2.0(businessprocess?modeling?notation)的通用流程建模技術實現(xiàn)業(yè)務流轉,比如:采購質(zhì)量報檢、車間綜合評價流程、普通分銷訂貨策略、門店等級評測方案、運費結算復核流程等等諸如此類,通過與工作流的配合,能夠大大提升業(yè)務的處理效率。

2、一般來講,工作流與業(yè)務的交互分為兩種情況:流程辦理與業(yè)務辦理。在實際業(yè)務場景中,業(yè)務操作與工作流操作解耦,必然帶來數(shù)據(jù)一致性的問題。

3、流程辦理不需要考慮業(yè)務單據(jù)之間的交互,待辦審批的時候,直接通過iframe標簽內(nèi)嵌業(yè)務單據(jù),僅僅用于跳轉而已;

4、業(yè)務辦理則需要在代碼中通過遠程過程調(diào)用協(xié)議rpc調(diào)用(遠程過程調(diào)用協(xié)議rpc調(diào)用一般通過網(wǎng)關gateway轉發(fā)實現(xiàn))工作流的運行任務runtask()接口,除了要考慮業(yè)務單據(jù)之間的交互,還要考慮業(yè)務單據(jù)與工作流之間的交互。

5、因此,業(yè)內(nèi)普遍做法是通過網(wǎng)關gateway遠程調(diào)用工作流接口,業(yè)務單據(jù)到底是提交還是回滾,取決于網(wǎng)關gateway(用于實現(xiàn)不同網(wǎng)絡之間的通信和數(shù)據(jù)轉發(fā)交換)轉發(fā)工作流接口之后的響應結果狀態(tài)碼。

6、如附圖1所示,如果響應的狀態(tài)碼是200(200?是http協(xié)議中的狀態(tài)碼,表示服務器成功處理了客戶端請求),那么業(yè)務側執(zhí)行業(yè)務單據(jù)提交動作;

7、如果響應狀態(tài)是非200,那么業(yè)務側執(zhí)行業(yè)務單據(jù)回滾動作。

8、但在實際應用中,這種解決方案存在潛在的未知異常風險,往往會出現(xiàn)“假失敗,真成功”的情況。

9、具體來說,業(yè)務側先通過網(wǎng)關geteway調(diào)用工作流接口,然后工作流將調(diào)用結果狀態(tài)轉發(fā)給gateway,gateway再將結果狀態(tài)轉發(fā)給業(yè)務側;業(yè)務側依據(jù)網(wǎng)關gateway返回的狀態(tài)結果,判斷業(yè)務單據(jù)到底是提交還是回滾,較為被動;并且中間交互過程完全依托于網(wǎng)絡通信的好壞,網(wǎng)絡通信出現(xiàn)延遲或網(wǎng)絡擁堵、抖動,都可能會出現(xiàn)網(wǎng)關gateway轉發(fā)結果異常,明明工作流調(diào)用成功,流程節(jié)點狀態(tài)也更新成功,但網(wǎng)關gateway返回業(yè)務側卻是網(wǎng)絡延遲或其他異常,導致業(yè)務單據(jù)回滾,業(yè)務單據(jù)狀態(tài)與流程節(jié)點不一致的情況。業(yè)務側無法完全信任網(wǎng)關gateway的響應結果狀態(tài),業(yè)務側處理業(yè)務單據(jù)較為被動,并且,缺乏行之有效性的日志審計手段,無法準確記錄二者數(shù)據(jù)狀態(tài),給業(yè)務帶來巨大的隱患。

10、因此,如何更好的解決業(yè)務辦理類型中業(yè)務單據(jù)與流程節(jié)點狀態(tài)一致性,是當前實際業(yè)務場景中亟需解決的問題。

11、為了更好解決業(yè)務單據(jù)與流程節(jié)點狀態(tài)一致性問題,本發(fā)明提出了一種基于bpmn錯誤邊界事件的業(yè)務單據(jù)處理方法與系統(tǒng)。


技術實現(xiàn)思路

1、本發(fā)明為了彌補現(xiàn)有技術的缺陷,提供了一種簡單高效的基于bpmn錯誤邊界事件的業(yè)務單據(jù)處理方法與系統(tǒng)。

2、本發(fā)明是通過如下技術方案實現(xiàn)的:

3、一種基于bpmn錯誤邊界事件的業(yè)務單據(jù)處理方法,其特征在于:使用業(yè)務流程建模符號bpmn來設計業(yè)務流程,將錯誤邊界事件嵌入子流程、調(diào)用者活動或者自定義節(jié)點;

4、當錯誤邊界事件依附的流程活動服務任務servicetask(用于自動執(zhí)行預定義的服務或操作)節(jié)點拋出bpmnerror錯誤后,錯誤事件被捕獲,觸發(fā)邊界事件,工作流直接調(diào)用業(yè)務側可執(zhí)行接口,一并攜帶流程節(jié)點狀態(tài)數(shù)據(jù)通知業(yè)務側,確保業(yè)務單據(jù)與流程節(jié)點狀態(tài)一致;同時,將調(diào)用過程通過日志記錄的形式實現(xiàn)業(yè)務單據(jù)與流程節(jié)點狀態(tài)的跟蹤留痕,便于后續(xù)的復盤審計。

5、包括以下步驟:

6、步驟s1、定義目標業(yè)務組件可執(zhí)行接口,接口路徑從前向后依次按照業(yè)務類型,業(yè)務編碼,v,版本號和/upd組成,其中版本號按照同類型業(yè)務從1開始自增疊加,所有接口請求方式全部設定為發(fā)送post,用于接下來的業(yè)務單據(jù)狀態(tài)更新動作;

7、步驟s2、將各業(yè)務組件目標可執(zhí)行接口維護到x1平臺字典列表中,當x1平臺初始化時,將字典列表轉換成json(javascript?object?notation,javascript對象簡譜)串,緩存到遠程字典服務器redis(remote?dictionary?server)緩存數(shù)據(jù)庫中,供服務任務servicetask節(jié)點訂閱使用;

8、所述步驟s2中,字典列表json串在遠程字典服務器redis緩存數(shù)據(jù)庫中的鍵key為業(yè)務流程建模符號應用服務接口隊列列表bpmn_api_queue_list;

9、業(yè)務流程建模符號應用服務接口隊列列表bpmn_api_queue_list中的每一項是一個由鍵值對key-value組成的字典項,用來維護業(yè)務目標可執(zhí)行接口屬性;其中,字典鍵key表示某一個業(yè)務目標可執(zhí)行接口唯一編碼,從前向后依次由前綴bpmn_api_,業(yè)務類型,業(yè)務編碼,v與業(yè)務方法增量組成,與步驟s1中定義的接口路徑保持一致,字典值value表示對應接口的實際url地址。

10、步驟s3、提供邊界事件軟件開發(fā)包sdk(software?development?kit)插件,利用邊界事件軟件開發(fā)包sdk插件封裝邊界事件border_evt;

11、邊界事件border_evt根據(jù)業(yè)務實際情況進行擴展,對流程引擎一側做到可插拔與動態(tài)升級;

12、流程引擎bpm-server(business?process?managementserver)依賴邊界事件軟件開發(fā)包sdk插件,在流程引擎模塊啟動時,將邊界事件border_evt實例化為一個bean,初始化到spring容器中,為接下來流程節(jié)點訂閱做準備;

13、步驟s4、按照業(yè)務實際場景需求自定義流程節(jié)點,節(jié)點類型至少包含用戶任務節(jié)點<bpmn2:?usertask>和服務任務節(jié)點<bpmn2:?servicetask>兩類,

14、其中,用戶任務節(jié)點<bpmn2:?usertask>的辦理方式為流程辦理,不需要與業(yè)務進行交互;

15、服務任務節(jié)點<bpmn2:?servicetask>為目標流程節(jié)點,辦理方式為業(yè)務辦理,需要與業(yè)務交互;

16、所述步驟s4中,選擇目標流程節(jié)點,并為其選擇表達式方式,將其綁定為:

17、${border_evt.exe(execution,業(yè)務目標可執(zhí)行接口字典key)};

18、其中,執(zhí)行上下文方法exe()為bean實例邊界事件border_evt封裝的內(nèi)部方法,用于捕獲錯誤邊界事件,執(zhí)行具體業(yè)務邏輯;

19、表達式引用bean實例必須以$開頭,以}結尾;

20、執(zhí)行execution表示工作流內(nèi)置的流程環(huán)境變量,業(yè)務目標可執(zhí)行接口字典鍵key取自遠程字典服務器redis緩存數(shù)據(jù)庫中業(yè)務流程建模符號應用服務接口隊列列表bpmn_api_queue_list字典列表中的某一項(根據(jù)實際業(yè)務場景選?。?;

21、步驟s5、工作流一側,執(zhí)行流程引擎bpm-server,捕獲錯誤邊界事件;

22、當業(yè)務流程進行到目標流程節(jié)點時,流程引擎bpm-server執(zhí)行以下操作:

23、步驟s5.1、流程引擎bpm-server從spring容器獲取邊界事件border_evt實例,利用java反射機制調(diào)用執(zhí)行上下文方法exe(),在執(zhí)行上下文方法exe()中執(zhí)行工作流的運行任務方法runtask(),完成流程通過操作;

24、步驟s5.2、執(zhí)行上下文方法exe()根據(jù)運行任務方法runtask()的運行結果(運行結果規(guī)定為bpmresult<list<taskdto>>,即業(yè)務流程結果<列表<任務數(shù)據(jù)傳輸對象)來決定是否拋出bpmnerror錯誤邊界異常:

25、若業(yè)務流程結果bpmresult響應狀態(tài)碼code為200,則不觸發(fā)bpmnerror錯誤邊界事件,繼續(xù)流轉到下一節(jié)點;

26、若業(yè)務流程結果bpmresult響應狀態(tài)碼非200,則直接拋出bpmnerror錯誤,觸發(fā)錯誤邊界事件,此時,執(zhí)行上下文方法exe()執(zhí)行以下操作:

27、步驟s5.2.1、執(zhí)行上下文方法exe()執(zhí)行獲取執(zhí)行變量方法execution.getvariable(“bpmn_busi_params”),獲取流程實例變量中傳過來的業(yè)務單據(jù)參數(shù)以及流程實例相關參數(shù);

28、步驟s5.2.2、執(zhí)行上下文方法exe()定義一個流程狀態(tài)參數(shù)flowstatus,并將其寫回到前一步驟s5.2.1獲取到的流程實例參數(shù)中,用以標記當前流程節(jié)點的實際狀態(tài);

29、步驟s5.2.3、執(zhí)行上下文方法exe()根據(jù)目標流程節(jié)點預先訂閱的業(yè)務目標可執(zhí)行接口字典鍵key,調(diào)用通過鍵獲取字典值方法dictutil.?getdictvaluebykey(業(yè)務目標可執(zhí)行接口字典key)獲取業(yè)務目標可執(zhí)行接口統(tǒng)一資源定位符url;此時,執(zhí)行上下文方法exe()使用httpclient客戶端攜帶獲取到的業(yè)務參數(shù),連同流程實例參數(shù)一起遠程調(diào)用業(yè)務目標可執(zhí)行接口,實現(xiàn)業(yè)務單據(jù)狀態(tài)更新動作;

30、步驟s6、業(yè)務組件一側,各目標業(yè)務組件內(nèi)置日志記錄sdk軟件開發(fā)包,日志記錄sdk軟件開發(fā)包提供統(tǒng)一日志記錄邏輯;當工作流觸發(fā)bpmnerror錯誤邊界事件時,回調(diào)業(yè)務目標可執(zhí)行接口,業(yè)務端接口的執(zhí)行過程以json串形式存儲下來,業(yè)務目標接口返回結果定義為baseresult<object>,即基礎結果<對象>;

31、若基礎結果baseresult響應碼code為200,則表示業(yè)務單據(jù)狀態(tài)更新成功,將json串中的業(yè)務單據(jù)狀態(tài)busistatus更新為流程節(jié)點狀態(tài)flowstatus,表示本次回調(diào)業(yè)務單據(jù)狀態(tài)成功;

32、若基礎結果baseresult響應碼code為非200,則表示業(yè)務單據(jù)狀態(tài)更新出現(xiàn)未知異常,將json串中的業(yè)務單據(jù)狀態(tài)busistatus更新為99,流程節(jié)點狀態(tài)flowstatus更新為當前流程節(jié)點實際狀態(tài),表示本次回調(diào)業(yè)務單據(jù)狀態(tài)失敗。

33、進一步的,所述步驟s6中,調(diào)用sdkk軟件開發(fā)包的跟蹤日志方法logutil.tracelog(json串)將步驟s5~步驟s6的調(diào)用過程生成的實際json結果串,并存入到日志庫,便于后續(xù)的人工審計和二次補償調(diào)用。

34、用于實現(xiàn)本發(fā)明基于bpmn錯誤邊界事件的業(yè)務單據(jù)處理方法的系統(tǒng),包括:

35、目標業(yè)務組件可執(zhí)行接口定義模塊,用于定義目標業(yè)務組件可執(zhí)行接口,接口路徑從前向后依次按照業(yè)務類型,業(yè)務編碼,v,版本號和/upd組成,其中版本號按照同類型業(yè)務從1開始自增疊加,所有接口請求方式全部設定為發(fā)送post;

36、目標業(yè)務組件可執(zhí)行接口發(fā)布模塊,用于將目標業(yè)務組件可執(zhí)行接口維護到x1平臺字典列表中,當x1平臺初始化時,將字典列表轉換成json(javascript?objectnotation,javascript對象簡譜)串,緩存到遠程字典服務器redis(remote?dictionaryserver)緩存數(shù)據(jù)庫中,供服務任務servicetask節(jié)點訂閱使用;

37、邊界事件軟件開發(fā)包sdk插件模塊,用于定義邊界事件border_evt,并將其依賴注入到流程引擎bpm-server中,在流程引擎模塊啟動時,將邊界事件border_evt實例化為一個bean,初始化到spring容器中,為接下來流程節(jié)點訂閱做準備;

38、工作流節(jié)點訂閱可執(zhí)行接口模塊,負責按照業(yè)務實際場景需求自定義流程節(jié)點,選擇類型為服務任務節(jié)點servicetask的目標節(jié)點,并為其選擇表達式方式,按照業(yè)務流程建模符號bpmn2.0定義規(guī)范,將目標節(jié)點綁定為:

39、${border_evt.exe(execution,'業(yè)務目標可執(zhí)行接口字典key?')};

40、工作流邊界事件捕獲及觸發(fā)模塊,負責在工作流一側執(zhí)行流程引擎bpm-server,捕獲錯誤邊界事件,工作流根據(jù)運行任務方法runtask()執(zhí)行結果,來決定是否拋出bpmnerror錯誤邊界事件以及是否調(diào)用業(yè)務單據(jù)接口,通知業(yè)務側執(zhí)行相應邏輯;

41、業(yè)務單據(jù)處理及日志審計模塊,負責在業(yè)務組件一側的各目標業(yè)務組件內(nèi)置日志記錄sdk軟件開發(fā)包,日志記錄sdk軟件開發(fā)包提供統(tǒng)一日志記錄邏輯;根據(jù)實際執(zhí)行情況更新業(yè)務單據(jù)狀態(tài)busistatus和流程節(jié)點狀態(tài)flowstatus,將執(zhí)行過程封裝為json串入到日志庫,進而保證二者狀態(tài)一致。

42、一種基于bpmn錯誤邊界事件的業(yè)務單據(jù)處理設備,其特征在于:包括存儲器和處理器;所述存儲器用于存儲計算機程序,所述處理器用于執(zhí)行所述計算機程序時實現(xiàn)如上所述的方法步驟。

43、一種可讀存儲介質(zhì),其特征在于:所述可讀存儲介質(zhì)上存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)如上所述的方法步驟。

44、本發(fā)明的有益效果是:該基于bpmn錯誤邊界事件的業(yè)務單據(jù)處理方法與系統(tǒng),提供了一種靈活的業(yè)務單據(jù)與流程節(jié)點綁定和訂閱關系,將業(yè)務單據(jù)的操作與流程處理的操作在邏輯上完全解耦,在不破壞業(yè)務邏輯結構的基礎上實現(xiàn)了業(yè)務數(shù)據(jù)回滾,解決了業(yè)務單據(jù)與流程節(jié)點狀態(tài)一致性問題,在保持業(yè)務完整性的同時又對業(yè)務和流程無感,能夠滿足不同業(yè)務場景下業(yè)務邏輯的橫向擴展,對流程引擎無代碼侵入影響。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1