首页 > 代码库 > 流程管理

流程管理

基本思路:

把人员信息——流程节点存到session

1.用户选择节点,输出单选框,单选框显示人员名称,并把人员代号存到value中,定义class名,为下边的添加节点按钮选择时用。 查询的是用户表

请选择流程节点:<br><br>    <?php    session_start();        include("../gongju/DBDA.class.php");        $db=new DBDA();        $user="select * from lc_user";        $auser=$db->Query($user);        $str="";        foreach($auser as $v)        {            echo "<input type=‘radio‘ class=‘us‘ name=‘us‘ value=http://www.mamicode.com/‘{$v[0]}‘>".$v[2];        }                        ?>        <br>        <input type="button" value="http://www.mamicode.com/添加节点" id="tianjia">

技术分享

 

2.给tianjia按钮添加点击事件,通过class名取单选框中所有元素 var us=$(".us");,用eq()方法分别判断每个元素的选中状态,如果选中,赋值给uid,传到处理界面

$("#tianjia").click(function(){        //取选中的用户名        var uid="";        var us=$(".us");        for(var i=0;i<us.length;i++)        {            if(us.eq(i).prop("checked"))            {                uid=us.eq(i).val();            }        }        $.ajax({            type:"post",            url:"lcjiedianchuli.php",            async:true,            data:{uid:uid,type:0},            dataType:"TEXT",            success:function(data)            {                window.location.href="http://www.mamicode.com/lc_main.php";            }        });    })

3.处理界面,如果使用一个处理界面,用switch($type){case 0:.........},

开启session,把取到的uid值存到session里面,

判断session里面有没有值,如果没有,就建一个带有传递过来uid值的数组,存到session,

如果session有值,把session赋值给一个数组,然后给这个数组添加传递过来的uid值,最后把session再赋给数组,

$attr=$_SESSION["user"];
$attr[]=$uid; $_SESSION["user"]=$attr;

这样数组中就存了所有选择的人员信息。

session_start();include("../gongju/DBDA.class.php");$db=new DBDA();$type=$_POST["type"];switch($type){    case 0:    $uid=$_POST["uid"];        if(empty($_SESSION["user"]))        {            $_SESSION["user"]=array($uid);        }else        {            $attr=$_SESSION["user"];            $attr[]=$uid;            $_SESSION["user"]=$attr;        }        break;

4.经过处理界面处理,session里面就存了含有选择的人员信息,ajax中成功返回的话就window.location.href="",相当于刷新页面,

返回选择节点页面,取session里面的值

把session赋给一个数组,数组中存放人员代号,遍历这个数组,并取数组的索引号和人员代号,进行显示,

取到索引是为了删除时,再把数组进行重新索引

添加删除按钮,给删除按钮一个标示,点击时,取到这个标示。

<div id="jiedian">            <?php                            $attr=array();                if(!empty($_SESSION["user"]))                {                    $attr=$_SESSION["user"];                    foreach($attr as $k=>$v)                    {                        $sname="select name from lc_user where uid=‘{$v}‘";                        $name=$db->StrQuery($sname);                        echo "<div>{$k}--{$name}--<input type=‘button‘ value=http://www.mamicode.com/‘删除‘ bs=‘{$k}‘ class=‘shanchu‘></div>";                                            }                }                                ?>                                </div>

5.删除,取到索引,并设置变量type=1,传递到处理界面

$(".shanchu").click(function(){                var suoyin=$(this).attr("bs");        $.ajax({            type:"post",            url:"lcjiedianchuli.php",            async:true,            data:{suoyin:suoyin,type:1},            dataType:"TEXT",            success:function(data)            {                window.location.href="http://www.mamicode.com/lc_main.php";            }        });    })

6.删除的处理界面,取到传递的索引,

因为人员信息是存到session里面,所以把session赋给一个数组,删除索引为传递过来索引的元素

unset()方法是删除数组中的某个元素

case 1:        $sy=$_POST["suoyin"];            $attr=$_SESSION["user"];        unset($attr[$sy]);        $attr=array_values($attr);        $_SESSION["user"]=$attr;        break;        

技术分享

 

到此,选择人员作为事件的节点结束。接下来做事件的流程

1.需要登陆者输入流程名称

<div>        请输入流程名称:        <input type="text"  id="name" />                <input type="button" id="xinjian" value="http://www.mamicode.com/保存" />            </div>

2.点击保存,进行两项操作。第一项:把流程代号和流程名称添加到流程表,第二项:把该流程中所有节点人员的信息添加到节点表

技术分享

技术分享

 

 

3.给保存加事件,上面两张表中,code可以取时间戳,name是用户输入的内容,uids和orders分别是session的值和索引,所以只需传name值即可。

$("#xinjian").click(function(){        var name=$("#name").val();        $.ajax({            type:"post",            url:"lcjiedianchuli.php",            async:true,            data:{name:name,type:2},            dataType:"TEXT",            success:function(data)            {                window.location.href="http://www.mamicode.com/lc_main.php";            }        });    })

 4.处理界面,先插入流程表中信息,

把session赋给一个数组,遍历数组,取到数组的索引和值,分别是orders和uids,因为取索引和值,

所以可以用foreach($attr as $k=>$v)这样的形式

case 2:            $name=$_POST["name"];        $code=time();        $slc="insert into liucheng values(‘{$code}‘,‘{$name}‘)";        $db->Query($sql,0);                $attr=array();        if(!empty($_SESSION["user"]))        {            $attr=$_SESSION["user"];        }        foreach($attr as $k=>$v)        {            $sql="insert into lc_flowpath values(‘‘,‘{$code}‘,‘{$v}‘,‘{$k}‘)";            $db->Query($sql,0);        }        break;

接下来做发起流程的过程

1.登陆者发起一个流程,先在下拉中填充流程列表,从流程表中查出数据显示

<h1>发起流程</h1>    <div>请选择要发起的流程:        <select id="sel">            <?php                include("../gongju/DBDA.class.php");                $db=new DBDA();                $sql="select * from liucheng";                $attr=$db->Query($sql);                foreach($attr as $v)                {                    echo "<option value=http://www.mamicode.com/‘{$v[0]}‘>{$v[1]}</option>";                }                                ?>        </select>            </div>            <div>请输入流程的详细信息        <textarea id="xq">                    </textarea>            </div>            <input type="button" value="http://www.mamicode.com/发起" id="btn"/>

2.点击发起,要把流程名称和流程内容添加到用户流程表中

技术分享

 

 

$("#btn").click(function(){        var code=$("#sel").val();        var nr=$("#xq").val();                $.ajax({            type:"post",            url:"lcjiedianchuli.php",            async:true,            data:{code:code,nr:nr,type:3},            dataType:"TEXT",            success:function(data)            {                                window.location.href="http://www.mamicode.com/lc_liucheng.php";            }        });    })

3.处理界面代码如下:把流程代号、流程内容,登陆者,发起日期添加到用户流程表

case 3:        $code=$_POST["code"];        $nr=$_POST["nr"];        $uid=$_SESSION["uid"];            $rq=time();        $sql="insert into lc_userflow values(‘‘,‘{$code}‘,‘{$uid}‘,‘{$nr}‘,‘0‘,‘{$rq}‘,‘0‘)";        $db->Query($sql,0);        break;

 

接下来做登录界面:如果登录者,在一个流程的节点中,如果流程到了他的一个节点,他可以改变此流程的状态,

如果流程还没有到此登陆者的节点,即不显示,

结束的流程也显示。

1.登陆界面和登录处理,比较简单,大体一写,注意:要把登录者的用户名存到新建的session里,用来判断流程的order与该用户名是否对应。

如果对应,则让流程显示,并让该登陆者改变状态,如果不对应,则不显示

<form action="lc_loginchuli.php" method="post">    <input type="text" name="uid" />    <input type="text" name="pwd" />    <input type="submit" value="http://www.mamicode.com/登录" />    </form>
session_start();include("../gongju/DBDA.class.php");$db=new DBDA();$uid=$_POST["uid"];$pwd=$_POST["pwd"];$sql="select pwd from lc_user where uid=‘{$uid}‘";$mm=$db->StrQuery($sql);if($mm==$pwd &&$pwd!=""){    $_SESSION["uid"]=$uid;    header("location:lc_liucheng.php");}else{    echo "登录失败";}

2.显示流程的信息:取登陆者的用户名、查询用户流程表查到流程代号和流程到哪里(towhere)、根据用户流程表查询,满足流程代号和当前登陆者的有关数据,

如果有数据,则查到该数据的order,通过用户流程表中的towhere和order做比较,

如果towhere等于order,那说明这个流程正好走到该登陆者,所以显示带有“通过”的流程信息

如果towhere大于order,说明已经处理过,显示“已通过”的流程信息。每次节点中人员处理一次,让towhere每次加1。

技术分享

技术分享

 

<table border="1" cellspacing="0" cellpadding="0">        <tr><th>发起者</th><th>发起时间</th><th>流程名称</th><th>流程内容</th><th>是否结束</th><th>操作</th></tr>        <?php    session_start();    include("../gongju/DBDA.class.php");    $db = new DBDA();        $uid = $_SESSION["uid"];        $sql = "select * from lc_userflow";    $attr = $db->Query($sql);        foreach($attr as $v)    {        $v[1];//流程代号        $v[6]; //流程走到哪了                //根据流程代号和当前登录者用户名查orders        $szai="select count(*) from lc_flowpath where code=‘{$v[1]}‘ and uids=‘{$uid}‘";        $n = $db->StrQuery($szai);                //该人员在该流程下        if($n>0)        {            $sorder = "select orders from lc_flowpath where code=‘{$v[1]}‘ and uids=‘{$uid}‘";            $order = $db->StrQuery($sorder);                        if($v[6]>=$order)            {                $str ="";                if($v[6]==$order)                {                    $str = "<a href=http://www.mamicode.com/‘lc_tongguo.php?ids={$v[0]}‘>通过</a>";                }                else                {                    $str = "<span style=‘color:green‘>已处理</span>";                }                echo "<tr><td>{$v[2]}</td>        <td>{$v[5]}</td>        <td>{$v[1]}</td>        <td>{$v[3]}</td>        <td>{$v[4]}</td>        <td>{$str}</td></tr>";            }        }    }        ?>    </table>

 3.做通过的处理:取到准备通过的人员流程表的ids值,通过一次,就让towhere+1、

取到表中的code和towhere的值,根据code值,到流程节点表中查询该流程共有几个节点或者节点的数量,

如果towhere的值大于等于流程节点的数量的话,就让isok的值改为1,表示该流程结束。

技术分享

技术分享

技术分享

 

<?phpsession_start();include("../gongju/DBDA.class.php");$db = new DBDA();$ids = $_GET["ids"];$sql = "update lc_userflow set towhere = towhere+1 where ids=‘{$ids}‘";$db->Query($sql,0);$stw = "select code,towhere from lc_userflow where ids=‘{$ids}‘";$atw = $db->Query($stw);$lcdaihao = $atw[0][0];$towhere = $atw[0][1];$jiedian = "select count(*) from lc_flowpath where code=‘{$lcdaihao}‘";$shuliang = $db->StrQuery($jiedian);if($towhere>=$shuliang){    $su = "update lc_userflow set isok =1 where ids=‘{$ids}‘ ";    $db->Query($su,0);}header("location:lc_liucheng.php");?>

 

流程管理