基于工作流的訂單處理方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于工作流的訂單處理方法及系統(tǒng)。
【背景技術(shù)】
[0002]當(dāng)前訂單處理系統(tǒng)通常是先按照業(yè)務(wù)邏輯區(qū)分成不同的獨(dú)立的模塊,然后根據(jù)各模塊的先后關(guān)系順序執(zhí)行。例如當(dāng)用戶在網(wǎng)站下單訂票時(shí),訂單處理系統(tǒng)會(huì)對(duì)訂單按照預(yù)設(shè)的流程調(diào)用相應(yīng)的模塊進(jìn)行定位、確認(rèn)客戶、出票等處理。這樣的訂單處理系統(tǒng)會(huì)存在以下問(wèn)題:
[0003]1、當(dāng)項(xiàng)目相對(duì)簡(jiǎn)單,業(yè)務(wù)邏輯不復(fù)雜的時(shí)候,當(dāng)前訂單處理系統(tǒng)可以在一定程度上滿足需求。但隨著需求的增加、項(xiàng)目變得龐大、業(yè)務(wù)邏輯變得錯(cuò)綜復(fù)雜,執(zhí)行控制流程會(huì)變得相對(duì)模糊,由于各模塊之間被獨(dú)立開來(lái),模塊之間需要互相通信的代價(jià)將變高,系統(tǒng)可讀性和可維護(hù)性隨之下降。
[0004]2、當(dāng)前訂單處理系統(tǒng)的每一級(jí)流程的執(zhí)行是通過(guò)上一級(jí)流程的觸發(fā)實(shí)現(xiàn)的,本流程在收到上一級(jí)流程的通知前必須常駐占據(jù)在內(nèi)存中監(jiān)聽(tīng)消息,保存一系列的程序狀態(tài)以供消息到達(dá)時(shí)使用,占用了大量的系統(tǒng)資源。
【發(fā)明內(nèi)容】
[0005]本發(fā)明要解決的技術(shù)問(wèn)題是為了克服現(xiàn)有的訂單處理系統(tǒng)可讀性和可維護(hù)性低以及占用大量的系統(tǒng)資源的缺陷,提供一種可讀性和可維護(hù)性高并且節(jié)省系統(tǒng)資源的基于工作流的訂單處理方法及系統(tǒng)。
[0006]本發(fā)明是通過(guò)以下技術(shù)方案解決上述技術(shù)問(wèn)題的:
[0007]本發(fā)明提供一種基于工作流的訂單處理方法,其特點(diǎn)是,包括:
[0008]執(zhí)行第一模塊的業(yè)務(wù)邏輯;
[0009]當(dāng)?shù)谝荒K執(zhí)行完畢時(shí),工作流中止執(zhí)行,等待第二模塊接受輸入;
[0010]工作流運(yùn)行時(shí)在等待第二模塊接受輸入時(shí)將所述第一模塊的執(zhí)行結(jié)果存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)中;
[0011 ]當(dāng)?shù)诙K開始接受輸入時(shí),工作流運(yùn)行時(shí)將所述第一模塊的執(zhí)行結(jié)果從所述數(shù)據(jù)庫(kù)中取出重新載入;
[0012]利用重新載入的所述第一模塊的執(zhí)行結(jié)果,執(zhí)行第二模塊的業(yè)務(wù)邏輯。
[0013]其中,訂單處理過(guò)程依據(jù)訂單的處理狀態(tài)劃分為不同的模塊,包括第一模塊和第二模塊,甚至還有第三模塊、第四模塊等,模塊的劃分使得模塊之間邊際更清晰,耦合度大大降低。第一模塊和第二模塊具有不同的業(yè)務(wù)邏輯,所述執(zhí)行結(jié)果包括訂單的處理狀態(tài),如訂單處理成功或失敗及產(chǎn)生的數(shù)據(jù)等。所述訂單處理方法在第二模塊等待輸入時(shí)利用工作流運(yùn)行時(shí)(workflow runtime)將第一模塊的執(zhí)行結(jié)果存儲(chǔ)在數(shù)據(jù)庫(kù)中,從而無(wú)需占用內(nèi)存。由于無(wú)需占用內(nèi)存,所以即使第二模塊等待了很長(zhǎng)時(shí)間才有輸入,也不會(huì)因?yàn)閮?nèi)存不足而影響到整個(gè)系統(tǒng)的運(yùn)行。此外,第一模塊的執(zhí)行結(jié)果的重新載入不一定發(fā)生在特定的機(jī)器的特定進(jìn)程中,這也意味著本技術(shù)方案中不同模塊可以充分利用分布式系統(tǒng)的優(yōu)勢(shì),縮短訂單處理時(shí)間,提高處理效率,以及提高可讀性和可維護(hù)性。
[0014]較佳地,所述訂單處理方法還包括在執(zhí)行第一模塊的業(yè)務(wù)邏輯之前執(zhí)行以下步驟:
[0015]構(gòu)造外層的工作流序列化事件,每個(gè)工作流序列化事件分別是多個(gè)模塊的集合;
[0016]分別以工作流消息的形式表示每個(gè)工作流序列化事件的各模塊的業(yè)務(wù)代碼;
[0017]指定每個(gè)工作流序列化事件的各模塊之間的依賴關(guān)系;
[0018]所述第一模塊為根據(jù)訂單的種類選取的工作流序列化事件的一個(gè)模塊,所述第二模塊為被選取的工作流序列化事件的一個(gè)與所述第一模塊具有依賴關(guān)系的模塊。
[0019]其中,構(gòu)造的工作流序列化事件可以為多個(gè),在訂單處理過(guò)程中,根據(jù)訂單的種類不同,會(huì)從多個(gè)工作流序列化事件中選擇一個(gè)來(lái)執(zhí)行。每個(gè)模塊在執(zhí)行完自身的業(yè)務(wù)邏輯完成自己的工作后,都會(huì)將當(dāng)前新的狀態(tài)推送給工作流處理引擎,這個(gè)狀態(tài)推送代碼都是同樣的,可以在所有模塊中復(fù)用,使其具有高的可復(fù)用性。
[0020]較佳地,所述第一模塊和所述第二模塊部署在獨(dú)立的集群上。
[0021]所述第一模塊和所述第二模塊部署的集群不同,即使其中一個(gè)模塊出現(xiàn)故障,也不會(huì)影響其它模塊。
[0022]較佳地,所述訂單處理方法還包括:
[0023]當(dāng)所述第二模塊的業(yè)務(wù)邏輯執(zhí)行完畢時(shí),將所述第二模塊的執(zhí)行結(jié)果存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)中。
[0024]存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)的第二模塊的執(zhí)行結(jié)果可被后續(xù)的其它模塊使用。
[0025]較佳地,所述數(shù)據(jù)庫(kù)部署于一服務(wù)器上。
[0026]本發(fā)明還提供一種基于工作流的訂單處理系統(tǒng),其特點(diǎn),包括:
[0027]第一執(zhí)行模塊,用于執(zhí)行第一模塊的業(yè)務(wù)邏輯;
[0028]控制模塊,用于在第一模塊的業(yè)務(wù)邏輯執(zhí)行完畢時(shí)中止執(zhí)行工作流,等待第二模塊接受輸入;
[0029]工作流運(yùn)行時(shí)用于在等待第二模塊接受輸入時(shí)將所述第一模塊的執(zhí)行結(jié)果存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)中;
[0030]工作流運(yùn)行時(shí)還用于當(dāng)?shù)诙K開始接受輸入時(shí),將所述第一模塊的執(zhí)行結(jié)果從所述數(shù)據(jù)庫(kù)中取出重新載入;
[0031]第二執(zhí)行模塊,用于利用重新載入的所述第一模塊的執(zhí)行結(jié)果,執(zhí)行第二模塊的業(yè)務(wù)邏輯。
[0032]較佳地,所述訂單處理系統(tǒng)還包括:
[0033]構(gòu)造模塊,用于在執(zhí)行第一模塊的業(yè)務(wù)邏輯之前,構(gòu)造外層的工作流序列化事件,每個(gè)工作流序列化事件分別是多個(gè)模塊的集合;
[0034]表示模塊,用于分別以工作流消息的形式表示每個(gè)工作流序列化事件的各模塊的業(yè)務(wù)代碼;
[0035]關(guān)系模塊,用于指定每個(gè)工作流序列化事件的各模塊之間的依賴關(guān)系;
[0036]所述第一模塊為根據(jù)訂單的種類選取的工作流序列化事件的一個(gè)模塊,所述第二模塊為被選取的工作流序列化事件的一個(gè)與所述第一模塊具有依賴關(guān)系的模塊。
[0037]較佳地,所述第一模塊和所述第二模塊部署在獨(dú)立的集群上。
[0038]較佳地,所述訂單處理系統(tǒng)還包括:
[0039]寫入模塊,用于當(dāng)所述第二模塊的業(yè)務(wù)邏輯執(zhí)行完畢時(shí),將所述第二模塊的執(zhí)行結(jié)果存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)中。
[0040]較佳地,所述訂單處理系統(tǒng)還包括:
[0041 ]服務(wù)器,用于部署所述數(shù)據(jù)庫(kù)部。
[0042]在符合本領(lǐng)域常識(shí)的基礎(chǔ)上,上述各優(yōu)選條件,可任意組合,即得本發(fā)明各較佳實(shí)例。
[0043]本發(fā)明的積極進(jìn)步效果在于:本發(fā)明能夠具有高的可讀性和可擴(kuò)展性,節(jié)省了系統(tǒng)資源,縮短了訂單處理時(shí)間,提高了處理效率。
【附圖說(shuō)明】
[0044]圖1為本發(fā)明的實(shí)施例的基于工作流的訂單處理方法的流程圖。
[0045]圖2為本發(fā)明的實(shí)施例的基于工作流的訂單處理系統(tǒng)的系統(tǒng)框圖。
【具體實(shí)施方式】
[0046]下面通過(guò)實(shí)施例的方式進(jìn)一步說(shuō)明本發(fā)明,但并不因此將本發(fā)明限制在所述的實(shí)施例范圍之中。
[0047]實(shí)施例
[0048]一種基于工作流的訂單處理方法,如圖1所示,包括:
[0049]步驟101、構(gòu)造外層的多個(gè)工作流序列化事件,每個(gè)工作流序列化事件分別是多個(gè)模塊的集合。
[0050]步驟102、分別以工作流消息的形式表示每個(gè)工作流序列化事件的各模塊的業(yè)務(wù)代碼。
[0051]步驟103、指定每個(gè)工作流序列化事件的各模塊之間的依賴關(guān)系。
[0052]其中,每個(gè)工作流序列化事件均包括一個(gè)第一模塊和一個(gè)第二模塊,但是不同的工作流序列化事件的第一模塊可以具有相同或不同業(yè)務(wù)邏輯,不同的工作流序列化事件的第二模塊也可以具有相同或不同業(yè)務(wù)邏輯。