亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 php教程 php手冊 介紹一個真正符合中國國情的工作流設(shè)計參考(包括PHP實現(xiàn))

介紹一個真正符合中國國情的工作流設(shè)計參考(包括PHP實現(xiàn))

Mar 24, 2017 am 10:27 AM
php實現(xiàn) 工作流程

?開源的工作流很少有讓人滿意的,即便是國內(nèi)用的比較多的jbpm,用起來也會覺得很便扭。再加上PHP中沒有什么好用的工作流,于是干脆自己設(shè)計一個,設(shè)計的原則如下:

1 根據(jù)80/20原則,只使用wfmc模型中最符合自身應(yīng)用的20%功能

2 充分吸收國內(nèi)使用jbpm開發(fā)BOSS中遇到的問題,工作流引擎只負(fù)責(zé)參數(shù)的收集和流程的流轉(zhuǎn),具體和業(yè)務(wù)的控制,交給每個流程定制的控制類去實現(xiàn)。

3 表單采用簡單的html+控制標(biāo)簽的方法實現(xiàn)

4 權(quán)限和模板引擎,以及其它輔助函數(shù)直接使用辦公系統(tǒng)自帶的框架

5 充分利用PHP語言的特點,流程設(shè)計是基于數(shù)據(jù)庫的,程序上使用OO設(shè)計,但采用重對象的方法

6 不把可視化設(shè)計流程的工作交給最終客戶,而且由設(shè)計時完成,因此不考慮流程版本更新的問題

一、工作流數(shù)據(jù)表設(shè)計

tbl_workflow_defination:工作流定義表

defination_id

流程id

?

defination_name

流程名稱

?

defination_handler

流程處理輔助文件,每個工作流一個文件

自定義處理文件,及其對象。例如workflow-proporsal-handler.php,其中定義對象proposal

tbl_workflow_node:流程結(jié)點步驟表

node_id

結(jié)點id

?

defination_id

流程id

?

node_index

結(jié)點序號

結(jié)點的step

node_name

結(jié)點名稱

?

node_type

結(jié)點類型

1人為決策,2自動處理(直接執(zhí)行execute_function),3等待外部響應(yīng)(例如外部WS觸發(fā)),4分支,5匯總 6結(jié)束結(jié)點(此結(jié)點執(zhí)行時候自動終止進(jìn)程)

init_function

流程初始函數(shù)

?

run_function

流程運行函數(shù)

?

save_function

流程保存函數(shù)

?

transit_function

流程流轉(zhuǎn)函數(shù)

?

prev_node_index

前結(jié)點序號

例如1。開始結(jié)點沒有

執(zhí)行前,通過此來校驗一下流程

next_node_index

后結(jié)點序號

例如[同意]3,[不同意]4。尾結(jié)點或要結(jié)束的結(jié)點沒有,若沒有,直接調(diào)用end

executor

執(zhí)行角色,組,人

role[1,2] group[1,2] user[1,2],為空由運行時決定

execute_type

執(zhí)行類型

0需所有人執(zhí)行 1只需一人執(zhí)行

remind

提醒

0不提醒 1郵件 2短信 3郵件和短信

field

可編輯的字段

name,content

max_day

最長時間()

?

tbl_workflow_process:流程執(zhí)行進(jìn)程表

process_id

進(jìn)程id

?

defination_id

流程id

?

process_desc

進(jìn)程描述

顯示在我的工作臺中

context

上下文

存放上下文變量,例如業(yè)務(wù)表的id

current_node_index

當(dāng)前結(jié)點序號

?

start_time

流程啟動時間

如遇分支、匯合顯示為:

1=》3,4=》3,5=》6

finish_time

流程完成時間

?

state

狀態(tài)

1運行 2結(jié)束

start_user

發(fā)起人

發(fā)起人,用于顯示自己的流程

tbl_workflow_thread :流程執(zhí)行線程表

thread_id

線程id

?

process_id

進(jìn)程id

?

process_desc

進(jìn)程描述

?

node_id

結(jié)點id

?

node_name

結(jié)點名稱

?

executor

執(zhí)行人

?

start_time

線程生成時間

?

receive_time

線程接收時間

?

finish_time

線程完成時間

?

max_time

結(jié)點規(guī)定的最長時間

?

state

狀態(tài)

0未接收 1已接收 2已處理

二、常見流程

人工決策


領(lǐng)導(dǎo)傳閱


部門領(lǐng)導(dǎo)審批


填寫表單


結(jié)束


放棄


提交


同意


重填(退回)


不同意


完成

外部響應(yīng)


發(fā)送支付信息


接收支付成功響應(yīng)(外部WS觸發(fā)該流程)

三、PHP設(shè)計

運行的函數(shù)由結(jié)點在設(shè)計時候決定,如果沒有設(shè)定,就使用默認(rèn)的函數(shù)。利用了PHP語言的以下特性

<?php
class Foo
{
    function Variable()
    {
        $name = &#39;Bar&#39;;
        $this->$name();?//?This?calls?the?Bar()?method
????}
????
????function?Bar()
????{
????????echo?"This?is?Bar";
????}
}

$foo?=?new?Foo();
$funcname?=?"Variable";
$foo->$funcname();??//?This?calls?$foo->Variable()

?>

使用前可以用method_exists來檢查

WorkflowService.php

? WorkflowService

??? $defination

$process

$node

$thread

$input 用戶輸入的和流程有關(guān)的變量

list_defination()

{

}

init_process(defination_id)

{? global user;

取得$defination,得到業(yè)務(wù)的handler,例如WorkflowProposalHandler

?? 建立$process行記錄

}

start_process()

{? 調(diào)用WorkflowProposalHandler->start($process)//新建業(yè)務(wù)對象,并把業(yè)務(wù)類的參數(shù)例如proposal_id放到$process[‘context’]里面

?? init_thread(1); ?//默認(rèn)調(diào)用第一個結(jié)點

}

?

list_ my_thread ()

{? global user;

}

?

init_thread(node_index)

{

? 取得$node

? 取得$process

? 修改$process為運行到當(dāng)前結(jié)點

? Switch($node[‘node_type’])

?? Case 1: 人工決策

?????? 建立$thread

?????? WorkflowProposalHandler-> init_function ($process,$node,$thread)

?????? 發(fā)送提醒

Case 2: 自動處理

??? 建立$thread

??? WorkflowProposalHandler-> init_function ($process,$node,$thread)

?????? 調(diào)用run_thread(thread_id)

Case 3: 等待外部響應(yīng)

??? 建立$thread

??? WorkflowProposalHandler-> init_function ($process,$node,$thread)

Case 4: 分支

??? 取得所有分支的子結(jié)點

??? init_thread(子結(jié)點)

Case 5: 匯總:

?? ?取得所有前結(jié)點,如果所有前結(jié)點的Thread都結(jié)束了,調(diào)出下一結(jié)點

?????? 調(diào)用init_thread(子結(jié)點)

Case 6: 結(jié)束:直接結(jié)束進(jìn)程process

??? end_process()

}

run_thread(thread_id)

{???

取得$node

取得$process

取得$thread

? Switch($node[‘node_type’])

?? Case 1: 人工決策

?????? 修改$thread為已接收

????????? WorkflowProposalHandler-> run_function ($process,$node,$thread)顯示表單

Case 2: 自動處理

??? 修改$thread為已接收

??? $next_node_id=WorkflowProposalHandler-> run_function ($process,$node,$thread)

?????? 調(diào)用transit_thread(thread_id, $next_node_id)

Case 3: 等待外部響應(yīng)

??? 修改$thread為已接收

??? $next_node_id=WorkflowProposalHandler-> run_function ($process,$node,$thread)

??? transit_thread(thread_id, $next_node_id)

Case 4: 分支

Case 5: 匯總:

Case 6: 結(jié)束:

}

save_thread(thread_id)

{? //保存結(jié)點數(shù)據(jù)

取得$node

取得$process

取得$thread

? Switch($node[‘node_type’])

?? Case 1: 人工決策

????????? WorkflowProposalHandler-> save_function ($process,$node,$thread)保存表單

WorkflowProposalHandler-> run_function ($process,$node,$thread)顯示表單

Case 2: 自動處理

Case 3: 等待外部響應(yīng)

Case 4: 分支

Case 5: 匯總:

Case 6: 結(jié)束:

}

transit_thread(thread_id, $next_node_id)

{ 取得$node

??取得$process

取得$thread

? Switch($node[‘node_type’])

?? Case 1: 人工決策

???? ?WorkflowProposalHandler->transit_function($process,$node,$thread,$next_node_id) ?

????????? 修改$thread為已完成

????????? If($next_node_id < $ cur_node_id) { //回退

刪除所有大于$next_node_idThread

}

init_thread($next_node_id)

Case 2: 自動處理

修改$thread為已完成

If($next_node_id < $ cur_node_id) { //回退

刪除所有大于$next_node_idThread

}

init _thread($next_node_id)

Case 3: 等待外部響應(yīng)

修改$thread為已完成

If($next_node_id < $ cur_node_id) { //回退

刪除所有大于$next_node_idThread

}

init _thread($next_node_id)

Case 4: 分支

Case 5: 匯總:

Case 6: 結(jié)束:

}

end_process()

list_my_process

view_process

workflow_proposal_handler.php

WorkflowProposalHandler

start()

prepare_input() 準(zhǔn)備用戶輸入變量,從$_POST收集

init_function () 線程建立后調(diào)用的默認(rèn)函數(shù),當(dāng)流程的執(zhí)行者由程序生成時,在此函數(shù)內(nèi)更改$threadexecutor,例如直接賦值user[2]

run_function () 線程運行化時候調(diào)用的默認(rèn)函數(shù)

save_function () 保存運行信息

transit_function ()執(zhí)行流轉(zhuǎn)

sendmail 其它結(jié)點調(diào)用函數(shù)

workflow.php

switch(op)

case list_defination

參數(shù):無

WorkflowService->list_defination()

case start_process :啟動

?????? 參數(shù):defination_id

?????? WorkflowService->init_process(defination_id)

WorkflowService->start_process()

?? case list_ my_thread :待處理的列表

?????? WorkflowService->list_ my_thread()

?? case run_thread :

?????? 參數(shù):thread_id

?????? WorkflowService->run_thread(thread_id)

case save_thread :

??? 參數(shù):thread_id

?? ?input收集起來(所有的變量以 f_開頭),賦給WorkflowServiceInput,另外還要獲得thread_id

??? WorkflowService->save_thread(thread_id)

?? case transit_thread :

?? 參數(shù):thread_id

input收集起來,賦給WorkflowServiceInput,另外還要獲得thread_id

$next_node_id = 得到用戶選擇的下一結(jié)點id

WorkflowService-> transit _thread(thread_id$next_node_id)

?? case list_my_process:所有我發(fā)起的流程

case list_all_process:所有我發(fā)起的流程

case view_process :

在其它程序中初始化流程

??? 1先自行建立好業(yè)務(wù)表單

2WorkflowService->init_process(defination_id)

3把建好的業(yè)務(wù)表單的ID放在processcontext里面

4WorkflowService->init_thread(1)

WorkflowService->transit_thread(1,2)通過手動調(diào)用把前面的流程過掉

外部服務(wù)繼續(xù)流轉(zhuǎn)流程(只用于自動流程)

1 input收集起來,賦給WorkflowServiceInput,另外還要獲得thread_id

2 WorkflowService->run_thread(thread_id)

相關(guān)文章:

PHP 工作流 自定義表單解決方案

怎么簡單實現(xiàn)工作流?

通達(dá)OA2015版工作流插件和列表控件數(shù)據(jù)解析

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
控制快取失效時間如何在PHP中實現(xiàn)? 控制快取失效時間如何在PHP中實現(xiàn)? Jun 19, 2023 pm 11:23 PM

隨著網(wǎng)路應(yīng)用的普及,網(wǎng)站響應(yīng)速度越來越成為用戶關(guān)注的重點。為了快速回應(yīng)用戶的請求,網(wǎng)站往往採用快取技術(shù)快取數(shù)據(jù),從而減少資料庫查詢次數(shù)。但是,快取的過期時間對反應(yīng)速度有著重要影響。本文將對控制快取失效時間的方法進(jìn)行探討,以幫助PHP開發(fā)者更好地應(yīng)用快取技術(shù)。一、什麼是快取失效時間?快取失效時間是指快取中的資料被認(rèn)為已經(jīng)過期的時間。它決定了快取中的資料何時需

如何使用 PHP 實現(xiàn)行動端適配與響應(yīng)式設(shè)計 如何使用 PHP 實現(xiàn)行動端適配與響應(yīng)式設(shè)計 Sep 05, 2023 pm 01:04 PM

如何使用PHP實現(xiàn)行動端適配和響應(yīng)式設(shè)計行動端適配和響應(yīng)式設(shè)計是現(xiàn)代網(wǎng)站開發(fā)中重要的實踐,它們能夠保證網(wǎng)站在不同裝置上的良好展示效果。在本文中,我們將介紹如何使用PHP實現(xiàn)行動端適配和響應(yīng)式設(shè)計,並附帶程式碼範(fàn)例。一、理解行動端適配和響應(yīng)式設(shè)計的概念行動端適配是指根據(jù)設(shè)備的不同特性和尺寸,針對不同的設(shè)備提供不同的樣式和佈局。而響應(yīng)式設(shè)計則是指透過使用

如何利用PHP實現(xiàn)用戶註冊功能 如何利用PHP實現(xiàn)用戶註冊功能 Sep 25, 2023 pm 06:13 PM

如何利用PHP實現(xiàn)用戶註冊功能在現(xiàn)代的網(wǎng)路應(yīng)用程式中,用戶註冊功能是一個非常常見的需求。透過註冊功能,使用者可以建立自己的帳戶並使用相應(yīng)的功能。本文將透過PHP程式語言來實現(xiàn)使用者註冊功能,並提供詳細(xì)的程式碼範(fàn)例。首先,我們需要建立一個HTML表單,用於接收使用者的註冊資訊。在表單中,我們需要包含一些輸入字段,如使用者名稱、密碼、郵箱等。可根據(jù)實際需求自訂表單欄位。

PHP實現(xiàn)的線上投票系統(tǒng)的使用者隱私保護(hù) PHP實現(xiàn)的線上投票系統(tǒng)的使用者隱私保護(hù) Aug 09, 2023 am 10:29 AM

PHP實現(xiàn)的線上投票系統(tǒng)的使用者隱私保護(hù)隨著網(wǎng)路的發(fā)展和普及,越來越多的投票活動開始轉(zhuǎn)移到線上平臺進(jìn)行。線上投票系統(tǒng)的便利性為用戶帶來了許多好處,但同時也引發(fā)了用戶隱私外洩的擔(dān)憂。隱私保護(hù)已經(jīng)成為線上投票系統(tǒng)設(shè)計的重要方面。本文將介紹如何使用PHP編寫一個線上投票系統(tǒng),並重點介紹用戶隱私保護(hù)的問題。在設(shè)計和開發(fā)線上投票系統(tǒng)時,需要遵循以下幾個原則來保

PHP資料快取的一致性雜湊演算法實作原理 PHP資料快取的一致性雜湊演算法實作原理 Aug 10, 2023 am 11:10 AM

PHP資料快取的一致性雜湊演算法實作原理一致性雜湊演算法(ConsistentHashing)是一種常用於分散式系統(tǒng)中資料快取的演算法,可以在系統(tǒng)擴(kuò)展和縮減時,最小化資料遷移的數(shù)量。在PHP中,實作一致性雜湊演算法可以提高資料快取的效率和可靠性,本文將介紹一致性雜湊演算法的原理,並提供程式碼範(fàn)例。一致性哈希演算法的基本原理傳統(tǒng)的哈希演算法將資料分散到不同的節(jié)點上,但當(dāng)節(jié)點

如何使用 PHP 實作檔案轉(zhuǎn)換和格式轉(zhuǎn)換功能 如何使用 PHP 實作檔案轉(zhuǎn)換和格式轉(zhuǎn)換功能 Sep 05, 2023 pm 03:40 PM

如何使用PHP實作檔案轉(zhuǎn)換和格式轉(zhuǎn)換功能1.引言在開發(fā)Web應(yīng)用程式過程中,我們經(jīng)常需要實作檔案轉(zhuǎn)換和格式轉(zhuǎn)換的功能。無論是將圖片檔案轉(zhuǎn)換為其他格式,還是將文字檔案從一種編碼轉(zhuǎn)換為另一種編碼,這些操作都是常見的需求。本文將介紹如何使用PHP實作這些功能,並附帶程式碼範(fàn)例。 2.檔案轉(zhuǎn)換2.1將圖片檔案轉(zhuǎn)換為其他格式在PHP中,我們可以使用

PHP如何實現(xiàn)微信小程式指紋登陸 PHP如何實現(xiàn)微信小程式指紋登陸 May 31, 2023 pm 10:40 PM

隨著微信小程式的不斷發(fā)展,越來越多的使用者開始選擇微信小程式進(jìn)行登陸。為了提高使用者的登入體驗,微信小程式開始支援指紋登陸。在本文中,我們將會介紹如何使用PHP來實現(xiàn)微信小程式的指紋登陸。一、了解微信小程式的指紋登陸在微信小程式的基礎(chǔ)上,開發(fā)者可以使用微信的指紋辨識功能,讓使用者透過指紋登陸微信小程序,從而提高登入體驗的安全性和便利性。二、準(zhǔn)備工作在使用PHP實現(xiàn)

美圖秀上車最新自研大模型,各類AIGC玩法可直接體驗 美圖秀上車最新自研大模型,各類AIGC玩法可直接體驗 Oct 11, 2023 am 11:29 AM

美圖自研的大模型3.0已經(jīng)正式發(fā)表!且全面應(yīng)用於美圖旗下影像與設(shè)計產(chǎn)品。圖片這是自美圖大模型面世100天後的最新迭代。相較於最初版本,3.0版能夠產(chǎn)生更真實細(xì)膩的畫面細(xì)節(jié)。圖片如上這些生成能力,在美圖秀上能直接體驗。圖片最近正流行的AIGC玩法,在其中都能找到。圖片美圖公司的創(chuàng)辦人、董事長兼CEO吳欣鴻透露,目前美圖的大部分產(chǎn)品都已經(jīng)融入了自己研發(fā)的大模型除了影像和設(shè)計領(lǐng)域,美圖自研大模型還將在電商、廣告、遊戲、動漫、影視五大產(chǎn)業(yè)發(fā)力。美圖秀可直接體驗美圖自研大模型名叫MiracleVi

See all articles