• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      輕量級工作流及其在發(fā)電企業(yè)燃料管理中的應用

      2020-03-22 03:32:54王鈞召江學武何云峰于俊清
      湖北電力 2020年6期
      關鍵詞:實例入口管理系統(tǒng)

      王鈞召,江學武,何云峰,于俊清*

      (1.廣東粵電信息科技有限公司,廣東 廣州510630;2.華中科技大學計算機科學與技術學院,湖北 武漢430074)

      0 引言

      工作流技術越來越廣泛地應用在企業(yè)信息系統(tǒng)中,大部分企業(yè)信息系統(tǒng)都選擇采用成熟的商業(yè)或開源的工作流產(chǎn)品,也有不少企業(yè)在原有信息系統(tǒng)基礎上進行二次開發(fā),實現(xiàn)符合自身需求的工作流管理系統(tǒng)(WfMS,Workflow Management System)[1-3]。商業(yè)工作流產(chǎn)品,國外主要有IBM 公司的Lotus Domino Workflow 和WebSphere MQ Workflow,以及Oracle 公司的Oracle Workflow 等工作流產(chǎn)品[4]。國內(nèi)目前比較流行的WfMS,主要有西安協(xié)同的SynchroFlow,上海東蘭的DLFlo 和杭州信雅達的SunFlow 等[5]。國外的工作流產(chǎn)品并不適合用于管理具有中國特點的業(yè)務流程,因此大部分企業(yè)都采用國內(nèi)廠商生產(chǎn)的工作流產(chǎn)品,維護和升級比較方便。目前使用較多的開源工作流產(chǎn)品,主要有jBPM(Java Business Process Management,jBPM)和Activiti。jBPM[6-7]提供了工作流引擎和應用擴展接口,可以根據(jù)不同需求進行功能擴展,能夠方便地集成到已有的系統(tǒng)中。Activiti[8-9]的發(fā)起人是原jBPM 創(chuàng) 始 人Tom Baeyens,Activiti 是 在jBPM3 和jBPM4 的基礎上發(fā)展而來的,其內(nèi)部接口與核心API與原jBPM 有很多的相似之處。Activiti 與jBPM 相比較,增加了流程可視化與管理能力,并加強了與外部系統(tǒng)的集成能力。

      功能完備的工作流產(chǎn)品除了支持基本的業(yè)務操作之外,還支持“撤銷”,“委派”,“會簽”以及“自由流”等復雜業(yè)務場景,實現(xiàn)比較復雜,如果要集成到原有的信息系統(tǒng)中,需要修改相關代碼和配置相關文件,才能方便對接。但是,發(fā)電企業(yè)燃料管理中的很多業(yè)務流程只需要基本的“通過”和“退回”功能,如果采用成熟的商業(yè)或開源工作流產(chǎn)品,將造成成本較高、集成復雜和系統(tǒng)兼容性差等問題。

      為了能夠方便地集成到已有的信息系統(tǒng)解決簡單的業(yè)務流程定制,設計了輕量級的工作流管理系統(tǒng)[10],并將系統(tǒng)應用到火力發(fā)電企業(yè)燃料信息系統(tǒng)的審批流程中,實際應用結(jié)果表明,該系統(tǒng)可以滿足信息系統(tǒng)中對審批流程自動化流轉(zhuǎn)的要求,能夠保證審批流程的正確運行。

      1 工作流管理系統(tǒng)

      1.1 工作流管理系統(tǒng)總體架構(gòu)

      根據(jù)WfMC 給出的工作流管理系統(tǒng)參考模型[11],輕量級工作流管理系統(tǒng)的總體架構(gòu)如圖1所示。

      圖1 工作流管理系統(tǒng)總體架構(gòu)圖Fig.1 System architecture of WfMC

      工作流管理系統(tǒng)主要由工作流定義工具和工作流引擎組成。其中,工作流定義工具以圖形化的方式為用戶提供抽象實際業(yè)務流程及描述流程的手段,同時生成工作流模型,這里的工作流模型是指可被計算機處理的形式化定義,是由組成工作流的各個活動以及活動之間的關聯(lián)關系等信息組成的一個完整的數(shù)據(jù)結(jié)構(gòu),通常被保存在數(shù)據(jù)庫中。工作流引擎將數(shù)據(jù)庫中保存的工作流模型作為依據(jù),驅(qū)動工作流實例的自動流轉(zhuǎn)[12]。

      1.2 工作流定義工具

      根據(jù)WfMC 規(guī)范,工作流定義工具由3 部分組成:模型設計器、工作流模型和模型控制器。

      模型設計器用于定義工作流模型,通過拖拽相關組件進行流程圖的繪制,鼠標點擊和鍵盤輸入操作可以設置各個活動的可操作角色,用戶做出的各種請求動作將由模型控制器響應。用戶定義工作流模型之前,流程設計器先查詢該工作流模型是否已存在,如存在則在原有模型的基礎上進行更改。

      工作流模型既可以保存為XML文件,也可以保存在數(shù)據(jù)庫中,作為工作流實例自動流轉(zhuǎn)的依據(jù)。輕量級工作流系統(tǒng)通過工作流表、節(jié)點表、節(jié)點間連線表、工作流實例執(zhí)行情況表4個數(shù)據(jù)表保存每一個工作流模型各個節(jié)點的信息和節(jié)點間連線信息,以及工作流實例的運行情況。

      模型控制器負責響應模型設計器的請求動作,主要功能包括:圖形化界面中各個組件的增刪改查,工作流模型與XML 文件的相互轉(zhuǎn)換,數(shù)據(jù)庫的存取,以及一些其他操作如清空、撤銷等。模型控制器中還提供一個重要功能,就是工作流模型的合理性驗證。對工作流模型的合理性驗證分為語法驗證、語義驗證和結(jié)構(gòu)驗證[13]。由于語義驗證由工作流模型設計人員負責驗證,所以驗證功能只提供語法驗證和結(jié)構(gòu)驗證。

      1.3 工作流引擎

      工作流引擎需要對定義的工作流模型進行解析,讓計算機能理解該模型的具體含義,驅(qū)動工作流實例按照該模型進行正確流轉(zhuǎn),它是工作流管理系統(tǒng)的核心組成部分[14]。對于每個工作流實例來說,各項任務能夠按照工作流模型進行自動流轉(zhuǎn)并且互不干擾,都是因為工作流引擎在后臺進行控制。工作流引擎的工作流程如下:

      1)用戶啟動某個工作流實例,該實例開始執(zhí)行;

      2)工作流引擎從數(shù)據(jù)庫中讀取對應的工作流模型;

      3)當用戶對某個節(jié)點操作完成,工作流引擎決定該實例的流轉(zhuǎn)方向,即決定下一個操作節(jié)點以及該節(jié)點可操作的角色,一直持續(xù)到該實例流轉(zhuǎn)結(jié)束。

      工作流引擎以工作流模型作為依據(jù),根據(jù)控制參與者的操作權限和工作流實例的執(zhí)行情況控制實例的正確流轉(zhuǎn)。

      2 工作流模型結(jié)構(gòu)驗證算法

      2.1 典型的結(jié)構(gòu)性錯誤

      定義的工作流模型是否合理直接決定了工作流實例能否正常執(zhí)行,因此工作流模型的合理性驗證至關重要。工作流模型的合理性驗證分為語法驗證、語義驗證和結(jié)構(gòu)驗證[15]。語法驗證提供初級的錯誤驗證,主要驗證是否有重名的節(jié)點,是否有孤立的節(jié)點,每個節(jié)點是否都存在輸入狀態(tài)和輸出狀態(tài)等。語義驗證用于驗證工作流的定義是否與實際業(yè)務流程的目標相同,由工作流模型設計人員負責。結(jié)構(gòu)驗證檢查是否存在非法并發(fā)、死循環(huán)等錯誤,這里重點說明結(jié)構(gòu)驗證。

      工作流模型存在唯一的開始節(jié)點和結(jié)束節(jié)點。工作流模型可以看作有向圖,該有向圖必須是連通圖,不能存在多個連通子圖。因此從開始節(jié)點進行遍歷必須能遍歷到所有的節(jié)點,否則存在節(jié)點不可達的錯誤。工作流模型中可能存在非法并發(fā)單元,主要表現(xiàn)為非法入口,非法出口和并發(fā)跳轉(zhuǎn)等。工作流模型組成元素包含:開始節(jié)點、結(jié)束節(jié)點、流程節(jié)點以及節(jié)點間連線。各個元素的圖形化表示如圖2所示。

      圖2 工作流模型組成元素表示圖Fig.2 The legend of Workflow engine

      常見的結(jié)構(gòu)性問題主要有以下幾個方面:

      1)節(jié)點不可達;指對于某一個節(jié)點,無法從開始節(jié)點找到一條路徑到達該節(jié)點,如圖3(a)所示。如果存在不可達的節(jié)點,那么該節(jié)點的存在是無意義的,因為在工作流實例的執(zhí)行過程中,該節(jié)點永遠不會得到執(zhí)行。

      2)非法并發(fā)單元:非法并發(fā)單元是指存在錯誤的并發(fā)單元,錯誤原因包括非法出口、非法入口和分支跳轉(zhuǎn)。

      非法出口,是指存在某條路徑,可以從并發(fā)單元內(nèi)的某個節(jié)點直接到達并發(fā)單元外的某個節(jié)點。如圖3(b)所示,一個有非法出口的并發(fā)單元由并發(fā)單元內(nèi)的流程節(jié)點B可以直接到達并發(fā)單元外的流程節(jié)點E。

      非法入口,是指存在某條路徑,可以從并發(fā)單元外的某個節(jié)點直接到達并發(fā)單元內(nèi)的某個節(jié)點。如圖3(c)所示,一個有非法入口的并發(fā)單元由并發(fā)單元外的流程節(jié)點A可以直接到達并發(fā)單元內(nèi)的流程節(jié)點C。

      分支跳轉(zhuǎn),是指存在某條路徑,可以從某個分支直接到達同一個并發(fā)單元中的另一個分支。如圖3(d)所示,一個分支間存在跳轉(zhuǎn)的并發(fā)單元由并發(fā)開始節(jié)點A有兩條完全不重合的路徑可以到達并發(fā)單元內(nèi)的流程節(jié)點C。

      3)其他錯誤:其他可能出現(xiàn)的結(jié)構(gòu)錯誤如圖3(e)所示,一個并發(fā)單元的并發(fā)開始節(jié)點A 可以直接到達并發(fā)結(jié)束節(jié)點D;又如圖3(f)所示,由流程節(jié)點A,B,C,D組成了一個環(huán),工作流實例一旦進入該環(huán)中,將一直在流程節(jié)點A,B,C,D之間循環(huán)執(zhí)行,系統(tǒng)產(chǎn)生死循環(huán),導致工作流實例不能正常結(jié)束。

      2.2 結(jié)構(gòu)驗證算法

      工作流模型可以看做是一個有向圖,利用深度優(yōu)先搜索的思想,對該有向圖進行遍歷,能夠檢測出存在的結(jié)構(gòu)性錯誤。結(jié)構(gòu)驗證算法基于矩陣模型和深度優(yōu)先搜索,能夠檢測出典型的結(jié)構(gòu)性錯誤。該算法的流程圖如圖4所示。

      1)初始化變量。

      初始化節(jié)點總數(shù)n,并規(guī)定開始節(jié)點的編號為0,結(jié)束節(jié)點的編號是n-1,其他節(jié)點編號按照層次遍歷的順序從1 開始逐一遞增。初始化矩陣變量matrix[n,n],visit[n,max]和info[n,3]。其中:

      matrix[n,n]表示工作流模型中的節(jié)點間關系。visit[i,j]表示節(jié)點i到j之間的邊執(zhí)行情況,0表示未執(zhí)行,1表示已執(zhí)行,工作流實例執(zhí)行之前所有的邊都是未執(zhí)行的。info[i,0]表示節(jié)點i是否已遍歷,0表示未遍歷,1 表示已遍歷;info[i,1]表示節(jié)點i 入邊個數(shù),info[i,2]表示節(jié)點i的出邊個數(shù)。

      2)驗證節(jié)點可達性。

      通過遞歸算法遍歷節(jié)點,驗證info[0...n-1,0]是否都是1,如果存在0的情況,假如info[i,0]為0,那么說明無法找到一條路徑從開始節(jié)點到達節(jié)點i,即存在不可達節(jié)點;如果info[0...n-1,0]都是1,則驗證通過。接下來驗證第二部分,采用相同的算法,但是傳入?yún)?shù)matrix 時,選擇傳入他的變形矩陣antiMatrix[n,n],其中:

      驗證從結(jié)束節(jié)點能否逆向到達所有節(jié)點,即驗證對于每一個節(jié)點都能至少找到一條路徑能到達結(jié)束節(jié)點。

      圖3 結(jié)構(gòu)性錯誤實例Fig.3 Examples of structural errors

      圖4 結(jié)構(gòu)驗證算法流程圖Fig.4 Flow chart of structure verification algorithm

      3)驗證是否存在非法的并發(fā)單元、死循環(huán)等錯誤。

      并發(fā)單元的驗證主要依據(jù)并發(fā)單元的并發(fā)入口和并發(fā)出口的一對一的關系,且并發(fā)入口先于并發(fā)出口出現(xiàn)。因此,如果發(fā)生以下情況,則說明存在非法并發(fā)單元:并發(fā)出口先于并發(fā)入口出現(xiàn);并發(fā)入口對應多個并發(fā)出口,或并發(fā)出口存在多個并發(fā)入口;并發(fā)入口與并發(fā)出口直連。

      為了達到上述驗證目的,定義了一個遞歸函數(shù),其偽代碼如下:

      Algorithm 1:結(jié)構(gòu)性驗證算法

      Input:

      id:當前遍歷節(jié)點的編號,初始為0

      matrix[n,n]:該有向圖的鄰接矩陣

      info[n,3]:info[i,1]表示節(jié)點i 入邊個數(shù),info[i,2]表示節(jié)點i的出邊個數(shù)

      dict[key,val]:dict中保存了所有的并發(fā)單元入口,并發(fā)單元出口的鍵值對[key,val]

      stack:保存并發(fā)單元入口

      Output:

      errorInfo:記錄可能發(fā)生錯誤的節(jié)點編號

      1:if(info[i][2]>1)then

      2:curKey ←id//curKey表示當前并發(fā)單元入口

      3:if(dict中不存在curKey)then

      4:dict ←[curKey,-1]

      5:curKey入棧stack

      6:endif

      7:endif

      8:if(info[id][1]>1)then

      9:curVal ←id//curVal表示當前并發(fā)單元出口

      10:if(dict中存在curKey)then

      11:if(dict[curKey]不存在對應的val)then

      12:dict[curKey]←curVal

      13:if(并發(fā)入口與并發(fā)出口直連)then

      14:errorInfo ←curVal//出現(xiàn)錯誤

      15:endif

      16:curKey 從stack 出棧//表示當前并發(fā)單元入口已找到出口,配對完成

      17:else if(dict[curKey]!=curVal)then

      18:errorInfo ←curVal//當前并發(fā)單元入口,存在多個出口,出現(xiàn)錯誤

      19:endif

      20:else then

      21:errorInfo ←curVal//當前并發(fā)單元出口,不存在入口,出現(xiàn)錯誤

      22:endif

      23:endif

      24:for(與節(jié)點id存在聯(lián)系的所有節(jié)點i)

      25:if(節(jié)點id到節(jié)點i之間的邊未遍歷過)then

      26:遞歸調(diào)用本算法,其中參數(shù)id傳入i

      27:endif

      28:endfor

      2.3 算法分析

      根據(jù)文獻[16]中的相關表述,表1 中對常見的工作流結(jié)構(gòu)驗證算法進行了比較。其中N/A表示無法從文獻中獲知。

      表1 結(jié)構(gòu)驗證算法比較表Table1 Structure verification algorithm comparison table

      由表1可知,相比其他算法,本算法可以驗證節(jié)點不可達、非法并發(fā)以及死循環(huán)等常見的結(jié)構(gòu)性錯誤,算法的時間復雜度不高,并且實現(xiàn)相對簡單。

      3 應用

      3.1 燃料信息管理系統(tǒng)

      火力發(fā)電企業(yè)燃料信息系統(tǒng)中,存在很多審批流程,審批流程中存在多個環(huán)節(jié),這些環(huán)節(jié)的操作都是類似的,只是操作順序或者操作角色不同。隨著需求的變動,審批流程需要經(jīng)常變更,系統(tǒng)開發(fā)人員需要針對流程的變更,更改原先的審批流程代碼,給系統(tǒng)帶來了不穩(wěn)定性,也增加了開發(fā)人員的負擔。因此針對這種情況,設計了工作流管理系統(tǒng),該系統(tǒng)可以自動控制審批流程的自動流轉(zhuǎn),即使更改審批流程,也不需要系統(tǒng)開發(fā)人員更改代碼,從而保證了系統(tǒng)的穩(wěn)定性。

      3.2 系統(tǒng)實現(xiàn)

      管理員設計工作流的具體執(zhí)行步驟,即定義工作流模型,定義結(jié)果將保存在數(shù)據(jù)庫中,作為工作流實例自動流轉(zhuǎn)的依據(jù)。模型設計器的工具欄中,提供了組件繪制功能,通過鼠標的點擊和拖拽動作便可完成設計,工具欄中還提供了清空,撤銷和與XML 文件相互轉(zhuǎn)換等輔助功能。模型設計器界面如圖5所示。

      圖5 模型設計器界面示意圖Fig.5 Workflow engine designer interface

      工作模型在保存之前,將進行合理性驗證,如果通過驗證則保存到數(shù)據(jù)庫中,否則不予保存。如果審批流程需要變更,只需更改在模型設計器中做簡單調(diào)整即可,不需要對系統(tǒng)代碼進行更改,但是之前正在執(zhí)行的工作流實例必須重新開始執(zhí)行。

      3.3 審批流程

      由具有指定權限的用戶“提交”審批,之后便啟動了一個合同審批流程的實例,該實例按照已定義的工作流模型開始執(zhí)行。對于系統(tǒng)中所有相關用戶,都存在一個待處理審批流程頁面,當某個工作流實例流轉(zhuǎn)到該用戶可處理的節(jié)點時,頁面就會顯示這個工作流實例,該用戶就能對這個實例進行審批操作。在審批過程中,可以看到工作流的詳細執(zhí)行情況,如圖6 所示,在已執(zhí)行節(jié)點上可以顯示該節(jié)點歷史執(zhí)行記錄,頁面右側(cè)顯示了該工作流實例的歷史執(zhí)行情況。

      圖6 某工作流實例執(zhí)行情況界面Fig.6 Workflow instance execution interface

      4 結(jié)語

      企業(yè)中某些業(yè)務流程只需要基本的“通過”和“退回”功能,如果采用成熟的商業(yè)或開源工作流產(chǎn)品,將造成成本較高,集成復雜以及系統(tǒng)不兼容等問題,本文針對這類簡單的業(yè)務流程設計和實現(xiàn)了輕量級的工作流管理系統(tǒng)可以有效解決該問題。由于設計的工作流管理系統(tǒng)在工作流模型定義,模型結(jié)構(gòu)性驗證方面存在一定的局限性,未來可以在模型設計器中,增加“或分支”功能,用于指示工作流中的并發(fā)單元是條件選擇關系,還是并發(fā)執(zhí)行關系。

      猜你喜歡
      實例入口管理系統(tǒng)
      基于James的院內(nèi)郵件管理系統(tǒng)的實現(xiàn)
      基于新一代稱重設備的入口治超勸返系統(tǒng)分析
      基于LED聯(lián)動顯示的違停管理系統(tǒng)
      秘密入口
      作品三
      絲路藝術(2018年3期)2018-06-23 10:12:28
      第九道 靈化閣入口保衛(wèi)戰(zhàn)
      海盾壓載水管理系統(tǒng)
      中國船檢(2017年3期)2017-05-18 11:33:08
      完形填空Ⅱ
      完形填空Ⅰ
      基于RFID的倉儲管理系統(tǒng)實現(xiàn)
      山阳县| 大冶市| 兴文县| 大埔县| 波密县| 赤峰市| 桦川县| 珲春市| 祁东县| 固原市| 宣汉县| 镇康县| 和田市| 财经| 西盟| 石阡县| 定日县| 澄江县| 威远县| 娄底市| 海盐县| 五莲县| 岳西县| 枣强县| 探索| 石台县| 宜兰县| 汕尾市| 洞头县| 兰坪| 龙陵县| 汝阳县| 广灵县| 大渡口区| 永安市| 合水县| 耒阳市| 中卫市| 温泉县| 金湖县| 罗定市|