需求
工單需要暫停和作廢,暫停作廢需要有可配置的流程
北汽通過預(yù)先設(shè)置的條件自動(dòng)進(jìn)入結(jié)算
江淮手動(dòng)選擇工單進(jìn)行結(jié)算
架構(gòu)設(shè)計(jì)
結(jié)算單是獨(dú)立的模塊 在AZ主站項(xiàng)目下 集成Aibol框架 接入 流程引擎
作廢/暫停 同時(shí)存在于需要 暫停和作廢 的項(xiàng)目下
比如工單有作廢 暫停 結(jié)算也有 作廢 暫停
總結(jié): 結(jié)算單 和 工單 平級(jí) , 每個(gè)都有獨(dú)立的 作廢/暫停
具體方案
-
有獨(dú)立的流程管理頁面 來為每個(gè)車廠配置特有的 結(jié)算流程
結(jié)算流程圖管理頁面 (考慮加入到workflow項(xiàng)目中統(tǒng)一管理),比如在現(xiàn)有的管理頁面中 加入下拉,也可以用側(cè)邊欄菜單分類(作廢和暫停要分為 工單作廢和暫停結(jié)算單作廢和暫停)

-
暫停和作廢設(shè)計(jì)
當(dāng)工單點(diǎn)擊暫停/作廢按鈕的時(shí)候 工單的 "Status" : 0, 變成 對(duì)應(yīng)狀態(tài) ,同時(shí)生成一份 暫停/作廢 運(yùn)行時(shí)
作廢/暫停 的 開始節(jié)點(diǎn) post方法 ==> 發(fā)送相關(guān)通知
網(wǎng)關(guān)判斷審核結(jié)果 進(jìn)入2個(gè)不同的 結(jié)束節(jié)點(diǎn)
通過結(jié)束節(jié)點(diǎn)的 prev方法 ==> 修改對(duì)應(yīng) "orderId" 的工單 的 "Status" 為確認(rèn)暫停/作廢 并添加對(duì)應(yīng) "operations" 工單暫停/作廢
不通過結(jié)束節(jié)點(diǎn)的 prev方法 ==> 修改對(duì)應(yīng) "orderId" 的工單 的 "Status" 為確認(rèn)暫停/作廢 并添加對(duì)應(yīng) "operations" 工單繼續(xù)運(yùn)行
申請(qǐng)暫停的工單 在申請(qǐng)全過程中 只會(huì)多2個(gè) "operations" 一個(gè)發(fā)起 一個(gè)結(jié)果
至于具體的審核流傳的 "operations" 在對(duì)應(yīng)的 暫停/作廢 運(yùn)行時(shí) 中體現(xiàn)
審核人/時(shí)間/結(jié)果/暫停作廢運(yùn)行時(shí)id 等信息 作為data保存在工單對(duì)應(yīng)的審核結(jié)果的data中 (可以不同步到mainData)
如果需要查詢訂單的暫停次數(shù) 只要過濾 "operations" 中 "type" : 暫停 的數(shù)據(jù) 就可以知道 所有 暫停操作的開始與結(jié)果
上圖申請(qǐng)task應(yīng)該不需要,點(diǎn)擊了按鈕 就自動(dòng)申請(qǐng)了
暫停/作廢
{
"_id" : ObjectId("5913c793ad273115ccf31231"),
"CreatedWhen" : ISODate("2017-05-11T02:08:19.255Z"),
"CreatedBy" : null,
"LastModifiedWhen" : ISODate("2017-05-11T02:08:19.257Z"),
"LastModifiedBy" : null,
"Status" : 0,
"orderId" : ObjectId("5913c793ad273115ccf30041"),
"operations" : [ ]
}
工單
{
"_id" : ObjectId("5913c793ad273115ccf30041"),
"CreatedWhen" : ISODate("2017-05-11T02:08:19.255Z"),
"CreatedBy" : null,
"LastModifiedWhen" : ISODate("2017-05-11T02:08:19.257Z"),
"LastModifiedBy" : null,
"Status" : 0,
"wfId" : "a69e81c5-3bf5-474b-a882-a1cf8933b66f",
"tenantId" : "5351405d-4e81-4f42-8cea-5526690b0fdc",
"title" : "test",
"view" : "CarIntention",
"Alias" : null,
"currentProcessId" : "Task_1t3nwjx",
"operations" : [
{
"CreatedWhen" : ISODate("2017-05-11T02:08:19.255Z"),
"CreatedBy" : "system",
"LastModifiedWhen" : ISODate("2017-05-11T02:08:19.255Z"),
"LastModifiedBy" : "system",
"Status" : 4,
"num" : 0,
"remark" : null,
"type" : 0,
"currectProcessName" : "選擇開始節(jié)點(diǎn)",
"here" : null,
"from" : null,
"view" : null,
"IsBacked" : null,
"data" : []
},
{
"CreatedWhen" : ISODate("2017-05-11T02:08:19.256Z"),
"CreatedBy" : "system",
"LastModifiedWhen" : ISODate("2017-05-11T02:08:19.256Z"),
"LastModifiedBy" : "system",
"Status" : 4,
"num" : 1,
"remark" : null,
"type" : 0,
"currectProcessName" : "",
"here" : "SequenceFlow_1cgwz8s",
"from" : "StartEvent_19fn7p6",
"view" : "",
"IsBacked" : null,
"data" : []
},
{
"CreatedWhen" : ISODate("2017-05-11T02:08:19.257Z"),
"CreatedBy" : "system",
"LastModifiedWhen" : ISODate("2017-05-11T02:08:19.257Z"),
"LastModifiedBy" : "system",
"Status" : 4,
"num" : 2,
"remark" : null,
"type" : 0,
"currectProcessName" : "新建購車意向",
"here" : "Task_1t3nwjx",
"from" : "SequenceFlow_1cgwz8s",
"view" : "CarIntention",
"IsBacked" : null,
"data" : []
}
],
"rate" : 6.0
}
-
結(jié)算單設(shè)計(jì)
結(jié)算單 是平級(jí)于 工單 的 一個(gè)獨(dú)立的流程運(yùn)行時(shí)
-
自動(dòng)結(jié)算方案 (北汽)
當(dāng)一個(gè)工單結(jié)束的時(shí)候 觸發(fā) 配置在結(jié)束節(jié)點(diǎn)的 prev方法 ==> 判斷是否有符合條件的結(jié)算單,如果有則加入,如果沒有則新增并加入,然后進(jìn)行后續(xù)操作
-
手動(dòng)結(jié)算方案 (江淮)
當(dāng)一個(gè)工單結(jié)束的時(shí)候 結(jié)束節(jié)點(diǎn)不配置prev方法,在結(jié)算流程的 第一個(gè)task "選擇需要結(jié)算的工單" 的時(shí)候 去修改結(jié)算單的 OrderId 數(shù)組,然后執(zhí)行后續(xù)操作
-
混合結(jié)算方案 (3-10日手動(dòng),其他自動(dòng))
基于自動(dòng)和手動(dòng)方案,修改工單結(jié)束節(jié)點(diǎn)prev方法 ==> 添加日期判斷 符合條件才進(jìn)行后續(xù)操作,不符合日期條件則不操作.在結(jié)算單流程的 "選擇需要結(jié)算的工單" 可以進(jìn)行手動(dòng)選擇結(jié)算(當(dāng)然也可以根據(jù)時(shí)間 關(guān)閉手動(dòng)選擇的權(quán)限,只要修改一下這個(gè) task 所屬 operation 的 Verify 方法 日期條件不通過則無法添加)
settlement
{
id:1233123123,
orderId:[
aaaaaaaa1,
bbbbbbb2,
ccccccccc3
],
......
}
缺少 : 結(jié)算流程圖 與 其具體的task頁面,結(jié)算模塊需要有自己的 “詳情頁面” 類似工單的主頁面,用來承載結(jié)算的流轉(zhuǎn),
post prev 方法的具體方案
該方法在前端設(shè)計(jì)器中配置,如圖

在主站系統(tǒng)中實(shí)現(xiàn)

流程運(yùn)轉(zhuǎn)的時(shí)候被調(diào)用執(zhí)行,由于方法在主站所以可以使用所有主站的資源
關(guān)于參數(shù)傳遞的實(shí)現(xiàn)設(shè)想方案,
az:prev="Basic.TestPrev?TenanId¶m1¶m2¶m3"
prev
:預(yù)方法
post
:后方法
Basic
:所在類
TestPrev
:方法名稱 與類名用 .
隔開
?TenanId¶m1¶m2¶m3
需要參數(shù),必須是主表主字段有的參數(shù)或者是當(dāng)前節(jié)點(diǎn)的data中有的參數(shù),用 ?
與方法名隔開,不同的參數(shù)用 &
隔開
問題
- 工單進(jìn)入結(jié)算后 相關(guān)的operations 是什么?開始結(jié)算,結(jié)算完畢?
- 工單/結(jié)算單 的所有狀態(tài)碼
- 流程引擎接入方案
- 單點(diǎn)登錄系統(tǒng)接入方案