• 流程管理


    基本思路:

    一人发起一个流程,该流程由其他几个人(即节点)来分别审核。就像请假流程,分别有不同领导通过,最后通过,改流程结束。

    前期session起到很重要的作用,session把每个节点的人员信息保存,通过与数组的来回转换,实现取值与赋值。

    把人员信息——流程节点存到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='{$v[0]}'>".$v[2];
            }
            
            
            ?>
            <br>
            <input type="button" value="添加节点" 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="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='删除' 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="lc_main.php";
                }
            });
        })

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

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

    unset()方法是删除数组中的某个元素,array_values()方法,是把数组重新索引。

    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="保存" />
            
        </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="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='{$v[0]}'>{$v[1]}</option>";
                    }
                    
                    ?>
            </select>
            
        </div>
        
        
        <div>请输入流程的详细信息
            <textarea id="xq">
                
            </textarea>
            
        </div>
        
        
        <input type="button" value="发起" 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="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="登录" />
        </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='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,表示该流程结束。

    <?php
    session_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");
    ?>
  • 相关阅读:
    hadoop12---java并发编程的一些总结
    hadoop11----socket
    springboot-vue项目后台2---pojo对查询结果手动分组
    hadoop10---消息队列
    hadoop09----线程池
    hadoop08---读写锁
    hadoop07---synchronized,lock
    hadoop06---多线程
    Java Applet与Java Application的区别
    HTML中id、name、class 区别
  • 原文地址:https://www.cnblogs.com/xingyue1988/p/6296628.html
Copyright © 2020-2023  润新知