源码下载:

提取码: 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 = processInstance.getId();

然后,通过id值来获取当前任务

Task task = taskService.createTaskQuery()//创建查询对象

.processInstanceId(processInstanceId)//通过流程实例id来查询当前任务

.singleResult();//获取单个查询结果

这样就可以跟踪流程啦!!!

这时候,问题又来了,怎么确定流程执行完了呢?怎么让程序自己找下一个任务?

还是用到ProcessInstance对象,前面说过,这个进程实例对象在流程执行完之前会一直存在,也就是说,流程执行完,这个对象就消失了,数据库自动就给他删除了.所以可以根据processInstanceId来查询ProcessInstance对象,如果为空,说明流程已经走完了,否则,没有走完

获取ProcessInstance对象的代码

this.processEngine.getRuntimeService()

.createProcessInstanceQuery()//获取查询对象

.processInstanceId(processInstanceId)//根据id查询流程实例

.singleResult();//获取查询结果,如果为空,说明这个流程已经执行完毕,否则,获取任务并执行

这样就可以判断流程是否结束了

那么,接下来,就是如何让流程自己找下一个任务,这里我用了一个while循环来解决,直接给出我的代码

//开始进行流程

while(this.processEngine.getRuntimeService()

.createProcessInstanceQuery()//获取查询对象

.processInstanceId(processInstanceId)//根据id查询流程实例

.singleResult()//获取查询结果,如果为空,说明这个流程已经执行完毕,否则,获取任务并执行

!=null){

Task task = taskService.createTaskQuery()//创建查询对象

.processInstanceId(processInstanceId)//通过流程实例id来查询当前任务

.singleResult();//获取单个查询结果

String taskName = task.getName();

if(taskName.equals("发起申请")){//职员节点

completeEmployeeTask(task);

}else if(taskName.equals("领导审批")){//领导节点

completeLeaderTask(task);

}else{//经理节点

completeJingliTask(task);

}

}

我的处理是把每个任务的完成,都封装成一个方法,要完成该任务时直接调用该方法就行,传入的参数是当前的任务的Task对象.

任务完成函数

//职员提交申请

public void completeEmployeeTask(Task task){

//获取任务id

String taskId = task.getId();

//完成任务

this.processEngine.getTaskService().complete(taskId);

System.out.println("职员已经提交申请.......");

}

//领导审批

public void completeLeaderTask(Task task){

//获取任务id

String taskId = task.getId();

//领导意见

Map variables = new HashMap();

//variables.put("day",4);

variables.put("leaderResult", 1);

//完成任务

this.processEngine.getTaskService().complete(taskId, variables);

System.out.println("领导审核完毕........");

}

//经理审批

public void completeJingliTask(Task task){

//获取任务id

String taskId = task.getId();

String name = task.getName();

//经理意见

Map variables = new HashMap();

variables.put("result", 0);

//完成任务

this.processEngine.getTaskService().complete(taskId, variables);

System.out.println("经理审核完毕........,审核经理:"+name);

}

有的小伙伴就要问,明明经理审核时有三个经理,为什么只写了一个经理审批函数呢?

在经理审核之前,是一个排他网关,网关后面出来的连接线中可以设置筛选条件,满足谁就去谁那里,设置见图

这里的变量是在领导审批这个任务完成之后传过来的,参数传递方法见上篇博文:https://www.jb51.net/article/182226.htm

这样,就实现了这个流程的基本运转啦!!

哦,对,还有一个问题,部署了多个流程变量,如何准确开启特定的流程

每个流程在定义的时候,都有一个id值,启动时便通过这个id值来启动,所以记住你设置的id值就可以啦!!!

到此这篇关于activiti实现员工请假流程解析的文章就介绍到这了,更多相关activiti请假流程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

java请假审批怎么实现_activiti实现员工请假流程解析相关推荐

  1. 某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该请假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批

    某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该请假条:如果员工请假天数大于等于3天,小于10天,经理可以审批:如果员工请假天数大于等于10天,小于30天,总经理可以审批 ...

  2. java员工请假系统_基于jsp的员工请假管理系统-JavaEE实现员工请假管理系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的员工请假管理系统, 该项目可用各类java课程设计大作业中, 员工请假管理系统的系统架构分为前后台两部分, 最终实 ...

  3. python 请假审批系统_基于工作流的请假审批系统设计与实现

    标[ ].系统结合单位的实际工作情况,应用工作流技术来实现无纸化请假,提供效率, 降低成本.文章以学生请假审批系统的详细设计与实现为背景,介绍了工作流技术的实现方 法. 1 系统需求分析 本系统主要是 ...

  4. OA系统实现(请假审批,mybatis)-2

    接上一个 开发多级审批流程 设计约束 每一个请假单对应一个审批流程 请假单创建后,按业务规则生成部门经理.总经理审批任务 审批任务的经办人只能审批自己辖区内的请假申请 所有审批任务"通过&q ...

  5. 使用PowerApps制作请假系统(二)--在Flow中生成请假审批流

    之前我们创建了一个可以想SharePoint列表进行写入的PowerApps小程序,现在我们在Flow中去创建这样的审批流: 1.SharePoint Online列表中新添加了请假申请 2.向申请者 ...

  6. NetBPM工作流的一个示例-请假审批

       NetBPM工作流的一个示例:请假审批 Made by LuBen:2007年8月12日 目录 请假流程描述 流程定义之processdefinition.xml 流程定义之webinterfa ...

  7. java计算机毕业设计疫情期间高校师生外出请假管理系统录屏源代码+系统+数据库+lw文档

    java计算机毕业设计疫情期间高校师生外出请假管理系统录屏源代码+系统+数据库+lw文档 java计算机毕业设计疫情期间高校师生外出请假管理系统录屏源代码+系统+数据库+lw文档 本源码技术栈: 项目 ...

  8. NetBpm 示例:请假审批(6)

    转载注明出处: http://www.cnblogs.com/anbylau2130/p/3877983.html 原文: 请假示例 流程定义包源码下载(注:par包就是zip格式压缩包).原文地址: ...

  9. activiti流程例子:详解员工请假流程的实现

    三更!!!!! 问我要源码的朋友们,我不是早就传千度云了吗?烦请自取,方式如下. 更新:最近发现好多小伙伴问我要源码,真是深感荣幸,所以就把源码上传了csdn,然鹅,,,好像是要积分的,我看了一下,好 ...

  10. OA系统二十四:请假审批五:【点击“审批”后的审批弹出框】的后台逻辑;(审批结果提交的Dao层和Service层逻辑)

    本篇博客的主要内容是:[请假审批内嵌页面],[审批弹出框]的点击"确认提交"后,后台的逻辑:主要是Dao层和Service层这些后台逻辑:  说明: (1)目前来看,为了实现某个功 ...

最新文章

  1. 写个Vue小组件,图片滚动
  2. Logstash同步mysql一对多数据到ES(踩坑日记系列)
  3. MATLAB函数记录
  4. 如何用express+node+ejs 搭建一个简单的页面
  5. spring3: 4.4 使用路径通配符加载Resource
  6. 作业三--阅读《构建之法》1-5章
  7. 深度学习--Keras总结
  8. leetcode题解72-编辑距离
  9. mysql 备份表_Mysql 表的备份与恢复
  10. iOS AVPlayer支持播放的格式
  11. 机器视觉运动控制一体机应用例程|芯片引脚缺陷检测系统
  12. Windows如何进入安全模式
  13. Python 圆拟合
  14. 新春送祝福,直接发红包。现金红包等你来拿~
  15. SQL中DATEADD用法
  16. 如何通过cmd查看python版本
  17. java 时间字符串比较大小_java中如何比较两个时间字符串的大小
  18. HP4230s笔记本安装mac os总结(原创)
  19. 阿里入股B站,到底意味着什么?
  20. Springboot人事信息管理系统毕业设计-附源码221507

热门文章

  1. 抖音短视频吃鸡戏精野生脆脆如何上的热门
  2. 2022年南京大学软件工程专硕上岸经验帖
  3. python gdal 基于栅格shp文件裁剪geotif图
  4. 多款AGV模型3D图纸 零件图,装配图都有 潜伏式,搬运AGV,内部结构详细
  5. 一、windows安装docker
  6. 杂记 什么是IP核?
  7. 69期-Java SE-036_MySQL-7 SQL练习 -doing
  8. 记ubuntu20.04无线网卡驱动安装
  9. python爬虫豆瓣TOP250电影信息并写入数据库
  10. Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码