国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

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

Mar 24, 2017 am 10:27 AM
pelaksanaan php Aliran kerja

?開源的工作流很少有讓人滿意的,即便是國內(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語言的特點(diǎn),流程設(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é)點(diǎn)步驟表

node_id

結(jié)點(diǎn)id

?

defination_id

流程id

?

node_index

結(jié)點(diǎn)序號

結(jié)點(diǎn)的step

node_name

結(jié)點(diǎn)名稱

?

node_type

結(jié)點(diǎn)類型

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

init_function

流程初始函數(shù)

?

run_function

流程運(yùn)行函數(shù)

?

save_function

流程保存函數(shù)

?

transit_function

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

?

prev_node_index

前結(jié)點(diǎn)序號

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

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

next_node_index

后結(jié)點(diǎn)序號

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

executor

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

role[1,2] group[1,2] user[1,2],為空由運(yùn)行時決定

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é)點(diǎn)序號

?

start_time

流程啟動時間

如遇分支、匯合顯示為:

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

finish_time

流程完成時間

?

state

狀態(tài)

1運(yùn)行 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é)點(diǎn)id

?

node_name

結(jié)點(diǎn)名稱

?

executor

執(zhí)行人

?

start_time

線程生成時間

?

receive_time

線程接收時間

?

finish_time

線程完成時間

?

max_time

結(jié)點(diǎn)規(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è)計

運(yùn)行的函數(shù)由結(jié)點(diǎn)在設(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é)點(diǎn)

}

?

list_ my_thread ()

{? global user;

}

?

init_thread(node_index)

{

? 取得$node

? 取得$process

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

? 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é)點(diǎn)

??? init_thread(子結(jié)點(diǎn))

Case 5: 匯總:

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

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

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é)點(diǎn)數(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 () 線程運(yùn)行化時候調(diào)用的默認(rèn)函數(shù)

save_function () 保存運(yùn)行信息

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

sendmail 其它結(jié)點(diǎn)調(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é)點(diǎn)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ù)解析

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276
Bagaimana untuk mengawal masa tamat tempoh cache dalam PHP? Bagaimana untuk mengawal masa tamat tempoh cache dalam PHP? Jun 19, 2023 pm 11:23 PM

Dengan populariti aplikasi Internet, kelajuan tindak balas laman web semakin menjadi tumpuan pengguna. Untuk bertindak balas dengan cepat kepada permintaan pengguna, tapak web sering menggunakan teknologi caching untuk menyimpan data cache, dengan itu mengurangkan bilangan pertanyaan pangkalan data. Walau bagaimanapun, masa tamat tempoh cache mempunyai kesan penting pada kelajuan tindak balas. Artikel ini akan membincangkan kaedah mengawal masa tamat tempoh cache untuk membantu pembangun PHP menggunakan teknologi caching dengan lebih baik. 1. Apakah masa tamat tempoh cache? Masa tamat cache merujuk kepada masa apabila data dalam cache dianggap tamat tempoh. Ia menentukan bila data dalam cache diperlukan

Cara menggunakan PHP untuk melaksanakan penyesuaian mudah alih dan reka bentuk responsif Cara menggunakan PHP untuk melaksanakan penyesuaian mudah alih dan reka bentuk responsif Sep 05, 2023 pm 01:04 PM

Cara menggunakan PHP untuk melaksanakan penyesuaian mudah alih dan reka bentuk responsif Penyesuaian mudah alih dan reka bentuk responsif ialah amalan penting dalam pembangunan tapak web moden. Ia boleh memastikan kesan paparan tapak web yang baik pada peranti yang berbeza. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP untuk melaksanakan penyesuaian mudah alih dan reka bentuk responsif, dengan contoh kod. 1. Fahami konsep penyesuaian mudah alih dan reka bentuk responsif Penyesuaian mudah alih merujuk kepada menyediakan gaya dan reka letak yang berbeza untuk peranti berbeza berdasarkan ciri dan saiz peranti yang berbeza. Reka bentuk responsif merujuk kepada penggunaan

Cara menggunakan PHP untuk melaksanakan fungsi pendaftaran pengguna Cara menggunakan PHP untuk melaksanakan fungsi pendaftaran pengguna Sep 25, 2023 pm 06:13 PM

Cara menggunakan PHP untuk melaksanakan fungsi pendaftaran pengguna Dalam aplikasi rangkaian moden, fungsi pendaftaran pengguna adalah keperluan yang sangat biasa. Melalui fungsi pendaftaran, pengguna boleh membuat akaun mereka sendiri dan menggunakan fungsi yang sepadan. Artikel ini akan melaksanakan fungsi pendaftaran pengguna melalui bahasa pengaturcaraan PHP dan memberikan contoh kod terperinci. Pertama, kita perlu mencipta borang HTML untuk menerima maklumat pendaftaran pengguna. Dalam borang, kita perlu memasukkan beberapa medan input, seperti nama pengguna, kata laluan, e-mel, dll. Medan borang boleh disesuaikan mengikut keperluan sebenar.

Perlindungan privasi pengguna sistem pengundian dalam talian dilaksanakan dalam PHP Perlindungan privasi pengguna sistem pengundian dalam talian dilaksanakan dalam PHP Aug 09, 2023 am 10:29 AM

Perlindungan privasi pengguna sistem pengundian dalam talian yang dilaksanakan dalam PHP Dengan pembangunan dan popularisasi Internet, semakin banyak aktiviti pengundian telah mula dipindahkan ke platform dalam talian. Kemudahan sistem pengundian dalam talian membawa banyak faedah kepada pengguna, tetapi ia juga menimbulkan kebimbangan mengenai kebocoran privasi pengguna. Perlindungan privasi telah menjadi aspek penting dalam reka bentuk sistem pengundian dalam talian. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menulis sistem pengundian dalam talian, dan menumpukan pada isu perlindungan privasi pengguna. Apabila mereka bentuk dan membangunkan sistem pengundian dalam talian, prinsip berikut perlu dipatuhi untuk memastikan

Prinsip pelaksanaan algoritma cincang yang konsisten untuk cache data PHP Prinsip pelaksanaan algoritma cincang yang konsisten untuk cache data PHP Aug 10, 2023 am 11:10 AM

Prinsip Pelaksanaan Algoritma Hash Konsisten untuk Cache Data PHP Algoritma Hashing Konsisten (ConsistentHashing) ialah algoritma yang biasa digunakan untuk cache data dalam sistem teragih, yang boleh meminimumkan bilangan migrasi data apabila sistem berkembang dan mengecut. Dalam PHP, melaksanakan algoritma pencincangan yang konsisten boleh meningkatkan kecekapan dan kebolehpercayaan caching data Artikel ini akan memperkenalkan prinsip algoritma pencincangan yang konsisten dan memberikan contoh kod. Prinsip asas algoritma pencincangan yang konsisten Algoritma pencincangan tradisional menyebarkan data ke nod yang berbeza, tetapi apabila nod

Cara menggunakan PHP untuk melaksanakan penukaran fail dan fungsi penukaran format Cara menggunakan PHP untuk melaksanakan penukaran fail dan fungsi penukaran format Sep 05, 2023 pm 03:40 PM

Cara menggunakan PHP untuk melaksanakan penukaran fail dan fungsi penukaran format 1. Pengenalan Dalam proses membangunkan aplikasi web, kita selalunya perlu melaksanakan penukaran fail dan fungsi penukaran format. Sama ada anda menukar fail imej kepada format lain atau menukar fail teks daripada satu pengekodan kepada yang lain, operasi ini adalah keperluan biasa. Artikel ini akan menerangkan cara melaksanakan fungsi ini menggunakan PHP, dengan contoh kod. 2. Penukaran fail 2.1 Tukar fail imej kepada format lain Dalam PHP, kita boleh gunakan

Bagaimana untuk melaksanakan log masuk cap jari untuk program mini WeChat dalam PHP Bagaimana untuk melaksanakan log masuk cap jari untuk program mini WeChat dalam PHP May 31, 2023 pm 10:40 PM

Dengan pembangunan berterusan program mini WeChat, semakin ramai pengguna mula memilih program mini WeChat untuk log masuk. Untuk meningkatkan pengalaman log masuk pengguna, program mini WeChat mula menyokong log masuk cap jari. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP untuk melaksanakan log masuk cap jari untuk program mini WeChat. 1. Fahami log masuk cap jari program mini WeChat Berdasarkan program mini WeChat, pembangun boleh menggunakan fungsi pengecaman cap jari WeChat untuk membolehkan pengguna log masuk ke program mini WeChat melalui cap jari, dengan itu meningkatkan keselamatan dan kemudahan pengalaman log masuk. 2. Kerja-kerja penyediaan dilaksanakan menggunakan PHP

Meitu Xiuxiu telah melancarkan model besar terbaharu yang dibangunkan sendiri, dan anda boleh mengalami secara langsung pelbagai permainan AIGC. Meitu Xiuxiu telah melancarkan model besar terbaharu yang dibangunkan sendiri, dan anda boleh mengalami secara langsung pelbagai permainan AIGC. Oct 11, 2023 am 11:29 AM

Model besar 3.0 yang dibangunkan sendiri oleh Meitu telah dikeluarkan secara rasmi! Dan ia digunakan sepenuhnya dalam produk pengimejan dan reka bentuk Meitu. Gambar Ini adalah lelaran terbaru model Meitu 100 hari selepas dikeluarkan. Berbanding dengan versi asal, versi 3.0 boleh menghasilkan butiran gambar yang lebih realistik dan halus. Keupayaan penjanaan gambar yang ditunjukkan di atas boleh dialami secara langsung pada Meitu Xiuxiu. Permainan AIGC yang popular baru-baru ini boleh didapati dalam gambar. Wu Xinhong, pengasas, pengerusi dan Ketua Pegawai Eksekutif Meitu, mendedahkan bahawa kebanyakan produk Meitu telah menggabungkan model besar yang dibangunkan sendiri Sebagai tambahan kepada bidang pengimejan dan reka bentuk, model besar yang dibangunkan sendiri oleh Meitu juga akan digunakan dalam e-dagang dan. pengiklanan. Lima industri utama , permainan, animasi, dan filem dan televisyen sedang berkembang. Meitu Xiuxiu boleh mengalami secara langsung model besar yang dibangunkan sendiri oleh Meitu yang dipanggil MiracleVi

See all articles