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

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

|

|
現(xiàn)在所描述的都是對(duì)同一個(gè)訂購(gòu)實(shí)例所下各種訂單的合單處理情況。
1.訂購(gòu)實(shí)例第一次下訂單,根據(jù)訂單生成工單和工單明細(xì)。
2.訂購(gòu)實(shí)例第二次下訂單
a) 之前生成的工單已經(jīng)竣工,生成新工單和新工單明細(xì)。
b) 之前生成的工單還未生產(chǎn),廢棄該工單,生成新工單和新工單明細(xì)
c) 之前生成的工單生產(chǎn)中,廢棄該工單,繼續(xù)沿用原工單編號(hào),合并生成新工單和新工單明細(xì)。新工單狀態(tài)為生產(chǎn)中。
在工單明細(xì)表增加字段“產(chǎn)品單元變更標(biāo)識(shí)”,如果產(chǎn)品單元對(duì)應(yīng)的屬性內(nèi)容在兩次訂單中沒(méi)有變化,引擎不暫定產(chǎn)品單元觸發(fā)的流程。
1.3.2 流程實(shí)例化
1.3.2.1 邏輯模型
流程定義模型見(jiàn)下圖,概念定義部分對(duì)名詞有描述。
流程定義 |
流程實(shí)例化 |

|

|
在業(yè)務(wù)支撐系統(tǒng)經(jīng)常使用的一個(gè)概念,實(shí)例化。
用戶購(gòu)買(mǎi)一個(gè)產(chǎn)品后,就產(chǎn)生一個(gè)產(chǎn)品的實(shí)例化,區(qū)別于別的客戶購(gòu)買(mǎi)的同類(lèi)產(chǎn)品,稱(chēng)為訂購(gòu)實(shí)例。
定義一組流程用來(lái)處理產(chǎn)品生產(chǎn)過(guò)程,具體到某個(gè)訂購(gòu)實(shí)例的生產(chǎn)過(guò)程的實(shí)例化,就有了流程組實(shí)例、流程實(shí)例、環(huán)節(jié)實(shí)例和任務(wù)實(shí)例。
1.3.2.2 流程定義過(guò)程
有了流程定義的模型,我們就是可以設(shè)計(jì)或者叫定義產(chǎn)品的生產(chǎn)流程。
完成一件復(fù)雜的工作,總是需要一個(gè)步驟一個(gè)步驟的完成,每個(gè)步驟稱(chēng)為一個(gè)環(huán)節(jié),在這個(gè)環(huán)節(jié)下可能需要做幾個(gè)事情,每個(gè)要做的事情稱(chēng)為一個(gè)任務(wù)。
1.根據(jù)生產(chǎn)部門(mén)劃分生產(chǎn)線
2.根據(jù)生產(chǎn)線+操作,定義流程,把流程中的任務(wù)根據(jù)負(fù)責(zé)人劃分為不同的環(huán)節(jié)。
3.按照產(chǎn)品涉及的流程劃分為不同的流程組。
1.3.2.3 流程實(shí)例化
1.實(shí)例化約束
a) 一個(gè)訂購(gòu)實(shí)例當(dāng)前只有一個(gè)運(yùn)行中的流程組實(shí)例;
b) 流程合并前先暫停,避免和引擎并發(fā)競(jìng)爭(zhēng)。
2.實(shí)例化過(guò)程
a) 接收工單,檢查訂購(gòu)實(shí)例當(dāng)前是否有流程組實(shí)例在運(yùn)行中;
i. 無(wú),實(shí)例化一個(gè)新的流程組實(shí)例
ii. 檢查是否屬于同一個(gè)流程組定義
1. 是同一個(gè)流程組,進(jìn)行流程合并。
2. 不是同一個(gè)流程組,暫不實(shí)例化,待下一次輪詢?cè)偬幚怼?/span>
流程合并細(xì)節(jié)見(jiàn)《流程合并詳細(xì)設(shè)計(jì)》
1.3.3 流程引擎
1.3.3.1 模型狀態(tài)
1.已實(shí)例化
2.已分配(負(fù)責(zé)人)
3.執(zhí)行中
4.暫停
5.已完成

流程啟動(dòng)后按順序執(zhí)行,當(dāng)要回到上一步驟時(shí),監(jiān)控頁(yè)面支持回退和回滾兩種操作。
回退,當(dāng)前執(zhí)行中/暫停的環(huán)節(jié)設(shè)置為已分配,上一環(huán)節(jié)由已完成設(shè)置為執(zhí)行中。
回滾,對(duì)任務(wù)可以執(zhí)行其反任務(wù)。
1.3.3.2 功能描述
1.引擎輪詢程序,檢查處于執(zhí)行中狀態(tài)的環(huán)節(jié),如果環(huán)節(jié)下所有關(guān)鍵任務(wù)都已完成則環(huán)節(jié)進(jìn)入已完成狀態(tài),下一環(huán)節(jié)進(jìn)入執(zhí)行中狀態(tài)。
2.環(huán)節(jié)實(shí)例化后處于已實(shí)例化狀態(tài),用戶在任務(wù)分配頁(yè)面指定環(huán)節(jié)負(fù)責(zé)人,環(huán)節(jié)處于已分配狀態(tài),上一環(huán)節(jié)完成后由引擎設(shè)置本環(huán)節(jié)進(jìn)入執(zhí)行中狀態(tài)。
3.鑒于引擎對(duì)執(zhí)行中的環(huán)節(jié)進(jìn)行調(diào)度工作,實(shí)例化程序和頁(yè)面監(jiān)控程序在對(duì)執(zhí)行中的環(huán)節(jié)操作時(shí),需先暫停環(huán)節(jié)。
4.監(jiān)控頁(yè)面支持對(duì)流程、環(huán)節(jié)的回退,支持對(duì)任務(wù)的回滾。