因為項目需要做了一個簡單的工作流引擎,用于集成訂單管理(IOM)的生產調度。之前的文章有提到。原想著有這樣一個引擎來進行生產調度,設計好業務流程后就可以面朝大海,春暖花開。在還生產系統對接的時候發現有一部分還是人工處理更好,畢竟不是所有的流程都能那么細致合理。
下面是我們的解決方案,圖片是從wps里另存出來的,不知道咋就變成黑底了。
1.1 問題描述
工作流引擎處理流程調度部分的內容。客戶下訂單之后,協調各生產部門進行工作。
最理想化的情況是對客戶發起的每一種操作都定義一組流程,在流程執行的過程中每種狀下態當有新的操作進來也相應定義一組流程,但這樣一來流程設計工作極其繁瑣,容易出錯,不利于降低管理難度減輕管理工作量。
一個折中的方案是對執行中的流程進行流程合并。選擇對一部分操作不創建新流程,給用戶提示信息,由用戶覺得如何進行手工操作。
1.2 問題分析
1.2.1 概念定義
生產平臺:生產平臺是由人和機器構成的,能將一定輸入轉化為特定輸出的有機整體。對應于工廠中的生產車間概念。
生產線:生產是與相關的一個部門或一組操作對應的組織。類似于項目組的概念,是依據生產流程對生產能力的一種劃分方式。
產品:產品是指中企動力運用營銷手段,將業務或業務組合附加上銷售對象、銷售地域、資費計劃、銷售渠道、服務水平及配套資源屬性后的產物,是向客戶最終交付的、客戶可以購買的產品單元組合實例。
產品單元:產品單元是業務在生產系統的具體表現。
產品單元與生產線之間是多對多的關系。如果一個產品單元需要跨多個生產線,引擎需要調度產品單元在不同生產線的生產過程。
流程組:流程組指由一系列操作流程組成的流程集合,有流程間的先后順序。流程組在此是由產品和操作類型共同決定的。
流程:流程是一系列操作環節的集合。環節間有并行和串行的關系。流程在此處是由平臺和操作類型決定的。
環節:環節是一系列操作的集合。環節此處定義是由一個人的一個或多個可并行的操作決定的。
任務:任務是可執行的最小單位。任務具有原子性,是環節的組成部分。一般一個任務完成一個事務。
一個環節包含多個任務,一個流程包含多個環節,一個流程組包含多個流程。
1.2.2 問題描述
以一件定制服裝的過程為例,只是為了說明問題對流程做了簡化。見下圖。
定制服裝生產流程:

最簡化的情況,客戶在提交了定制服裝生產的要求后便不再干預,生產線就按流程走就可以了。
但是客戶可能會在生產的各個環節提出變更要求,已經制作完成了客戶要求加個兜,已經質檢完成了客戶要求加個紐扣,已經包裝好了客戶要求領子樣式改改。
如果把每一種可能都定義一組流程,就這個簡化流程全部列出來也夠貼一面墻了。所以我們采取了一種折中的方案,在大多數情況下正在生產時客戶要求有變化,通過一個描述性的工單告訴生產線負責人暫停生產、并由負責人來決定回退到那個環節重新進行。
如果都包裝好了客戶還要改,那就暫停當前流程,走和客戶打官司的流程了,這種情況下需要一個流程。
本方案通過對生產中的流程進行合并,減少流程定義的工作量和復雜程性度。
1.3 問題解決
1.3.1 工單
1.3.1.1 邏輯模型
訂單生成工單的過程,稱為合單。
訂單工單關系 |
工單屬性 |

|

|
現在所描述的都是對同一個訂購實例所下各種訂單的合單處理情況。
1.訂購實例第一次下訂單,根據訂單生成工單和工單明細。
2.訂購實例第二次下訂單
a) 之前生成的工單已經竣工,生成新工單和新工單明細。
b) 之前生成的工單還未生產,廢棄該工單,生成新工單和新工單明細
c) 之前生成的工單生產中,廢棄該工單,繼續沿用原工單編號,合并生成新工單和新工單明細。新工單狀態為生產中。
在工單明細表增加字段“產品單元變更標識”,如果產品單元對應的屬性內容在兩次訂單中沒有變化,引擎不暫定產品單元觸發的流程。
1.3.2 流程實例化
1.3.2.1 邏輯模型
流程定義模型見下圖,概念定義部分對名詞有描述。
流程定義 |
流程實例化 |

|

|
在業務支撐系統經常使用的一個概念,實例化。
用戶購買一個產品后,就產生一個產品的實例化,區別于別的客戶購買的同類產品,稱為訂購實例。
定義一組流程用來處理產品生產過程,具體到某個訂購實例的生產過程的實例化,就有了流程組實例、流程實例、環節實例和任務實例。
1.3.2.2 流程定義過程
有了流程定義的模型,我們就是可以設計或者叫定義產品的生產流程。
完成一件復雜的工作,總是需要一個步驟一個步驟的完成,每個步驟稱為一個環節,在這個環節下可能需要做幾個事情,每個要做的事情稱為一個任務。
1.根據生產部門劃分生產線
2.根據生產線+操作,定義流程,把流程中的任務根據負責人劃分為不同的環節。
3.按照產品涉及的流程劃分為不同的流程組。
1.3.2.3 流程實例化
1.實例化約束
a) 一個訂購實例當前只有一個運行中的流程組實例;
b) 流程合并前先暫停,避免和引擎并發競爭。
2.實例化過程
a) 接收工單,檢查訂購實例當前是否有流程組實例在運行中;
i. 無,實例化一個新的流程組實例
ii. 檢查是否屬于同一個流程組定義
1. 是同一個流程組,進行流程合并。
2. 不是同一個流程組,暫不實例化,待下一次輪詢再處理。
流程合并細節見《流程合并詳細設計》
1.3.3 流程引擎
1.3.3.1 模型狀態
1.已實例化
2.已分配(負責人)
3.執行中
4.暫停
5.已完成

流程啟動后按順序執行,當要回到上一步驟時,監控頁面支持回退和回滾兩種操作。
回退,當前執行中/暫停的環節設置為已分配,上一環節由已完成設置為執行中。
回滾,對任務可以執行其反任務。
1.3.3.2 功能描述
1.引擎輪詢程序,檢查處于執行中狀態的環節,如果環節下所有關鍵任務都已完成則環節進入已完成狀態,下一環節進入執行中狀態。
2.環節實例化后處于已實例化狀態,用戶在任務分配頁面指定環節負責人,環節處于已分配狀態,上一環節完成后由引擎設置本環節進入執行中狀態。
3.鑒于引擎對執行中的環節進行調度工作,實例化程序和頁面監控程序在對執行中的環節操作時,需先暫停環節。
4.監控頁面支持對流程、環節的回退,支持對任務的回滾。