activiti实现员工请假流程解析

activiti实现员工请假流程解析

2023年8月1日发(作者:)

activiti实现员⼯请假流程解析源码下载:提取码: twmp在开始之前,先说⼀下刚开始学习⼯作流的时候遇到的问题,感觉⽐较困惑,经过这两天的学习,也算有所收获1.部署了多个流程变量,如何准确开启特定的流程2. 在⼀个流程的执⾏过程中,怎么确定执⾏到哪⼀步,即执⾏到哪个任务了3. 在有多种情况的条件下,怎么判断要去的⽅向先不急着解决,来看看我的⼯程⼯程模拟情况员⼯请假流程员⼯发起申请,附带请假信息(请假⼏天)单位领导审批,如果通过,交付经理审批,不通过,重新申请经理审批,如果请假天数不超过三天,经理1审批如果请假天数在3-5天,经理3审批超过5天,经理2审批经理审批通过,流程结束,经理审批不通过,员⼯重新申请流程图领导意见和经理意见,⽤0和1表⽰,0表⽰未通过,1表⽰通过多种执⾏情况⼀.不超过3天,经理1审批,同意申请⼆.3-5天,经理3审批,同意申请三. 5天以上,经理2审批,同意申请四. 任⼀环节设置不同意,陷⼊死循环情况:请假天数超过5天,领导同意申请,经理2审批,且不同意申请我的流程中,是⼀次执⾏完所有任务,直到流程结束,刚开始学习的⼩伙伴肯定很苦恼于这个问题,怎么让流程⾃⼰执⾏下去,我前两天⼀直在想这个问题要解决这个问题,随之⽽来的第⼀个问题是,怎么获取当前任务,换句话说,就是怎么跟踪流程每个流程运⾏时,都会产⽣⼀个进程实例.这是⼀个ProcessInstance对象,相当于⼀个实体类,在数据库中有他的信息,⽽且在这个流程执⾏完之前,这个实例流程会⼀直存在,并且id值不会变.那么,我们可不可以在每次启动流程时都将这个ProcessInstance对象保存记录下来,然后再通过他的id值来查询当前任务,也就是来跟踪流程的执⾏情况给出获取代码//开启流程 ProcessInstance processInstance = runtimeService .startProcessInstanceByKey(processKey, variables); processInstanceId = ();然后,通过id值来获取当前任务Task task = TaskQuery()//创建查询对象 .processInstanceId(processInstanceId)//通过流程实例id来查询当前任务 .singleResult();//获取单个查询结果这样就可以跟踪流程啦这时候,问题⼜来了,怎么确定流程执⾏完了呢?怎么让程序⾃⼰找下⼀个任务?还是⽤到ProcessInstance对象,前⾯说过,这个进程实例对象在流程执⾏完之前会⼀直存在,也就是说,流程执⾏完,这个对象就消失了,数据库⾃动就给他删除了.所以可以根据processInstanceId来查询ProcessInstance对象,如果为空,说明流程已经⾛完了,否则,没有⾛完获取ProcessInstance对象的代码timeService() .createProcessInstanceQuery()//获取查询对象 .processInstanceId(processInstanceId)//根据id查询流程实例 .singleResult();//获取查询结果,如果为空,说明这个流程已经执⾏完毕,否则,获取任务并执⾏这样就可以判断流程是否结束了那么,接下来,就是如何让流程⾃⼰找下⼀个任务,这⾥我⽤了⼀个while循环来解决,直接给出我的代码//开始进⾏流程 while(timeService() .createProcessInstanceQuery()//获取查询对象 .processInstanceId(processInstanceId)//根据id查询流程实例 .singleResult()//获取查询结果,如果为空,说明这个流程已经执⾏完毕,否则,获取任务并执⾏ !=null){ Task task = TaskQuery()//创建查询对象 .processInstanceId(processInstanceId)//通过流程实例id来查询当前任务 .singleResult();//获取单个查询结果 String taskName = e(); if(("发起申请")){//职员节点 completeEmployeeTask(task); }else if(("领导审批")){//领导节点 completeLeaderTask(task); }else{//经理节点 completeJingliTask(task); } }我的处理是把每个任务的完成,都封装成⼀个⽅法,要完成该任务时直接调⽤该⽅法就⾏,传⼊的参数是当前的任务的Task对象.任务完成函数//职员提交申请 public void completeEmployeeTask(Task task){ //获取任务id String taskId = ();

//完成任务 kService().complete(taskId); n("职员已经提交申请.......");

} //领导审批 public void completeLeaderTask(Task task){ //获取任务id String taskId = ();

//领导意见 Map variables = new HashMap(); //("day",4); ("leaderResult", 1); //完成任务 kService().complete(taskId, variables); n("领导审核完毕........");

} //经理审批 public void completeJingliTask(Task task){ //获取任务id String taskId = (); String name = e(); //经理意见 Map variables = new HashMap(); ("result", 0); //完成任务 kService().complete(taskId, variables); n("经理审核完毕........,审核经理:"+name);

}有的⼩伙伴就要问,明明经理审核时有三个经理,为什么只写了⼀个经理审批函数呢?在经理审核之前,是⼀个排他⽹关,⽹关后⾯出来的连接线中可以设置筛选条件,满⾜谁就去谁那⾥,设置见图这样,就实现了这个流程的基本运转啦!!哦,对,还有⼀个问题,部署了多个流程变量,如何准确开启特定的流程每个流程在定义的时候,都有⼀个id值,启动时便通过这个id值来启动,所以记住你设置的id值就可以啦到此这篇关于activiti实现员⼯请假流程解析的⽂章就介绍到这了,更多相关activiti请假流程内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690873628a452104.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信