三更!!!!!
问我要源码的朋友们,我不是早就传千度云了吗?烦请自取,方式如下。

更新:最近发现好多小伙伴问我要源码,真是深感荣幸,所以就把源码上传了csdn,然鹅,,,好像是要积分的,我看了一下,好像不能自己设置积分。。所以,有积分的小伙伴就下载一下吧。
百度云:https://pan.baidu.com/share/init?surl=3Q_THiI-pTrJ0R-g501F-A
提取码:7xow。
最后一句,下载完记得评论一下呦!!


在开始之前,先说一下刚开始学习工作流的时候遇到的问题,感觉比较困惑,经过这两天的学习,也算有所收获

1. 部署了多个流程变量,如何准确开启特定的流程
2. 在一个流程的执行过程中,怎么确定执行到哪一步,即执行到哪个任务了
3. 在有多种情况的条件下,怎么判断要去的方向

先不急着解决,来看看我的工程
工程模拟情况

员工请假流程

  1. 员工发起申请,附带请假信息(请假几天)
  2. 单位领导审批,如果通过,交付经理审批,不通过,重新申请
  3. 经理审批,如果请假天数不超过三天,经理1审批
    如果请假天数在3-5天,经理3审批
    超过5天,经理2审批
  4. 经理审批通过,流程结束,经理审批不通过,员工重新申请

流程图

领导意见和经理意见,用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){//获取任务idString taskId = task.getId();//完成任务this.processEngine.getTaskService().complete(taskId);System.out.println("职员已经提交申请.......");}//领导审批public void completeLeaderTask(Task task){//获取任务idString taskId = task.getId();//领导意见Map<String, Object> variables = new HashMap<String, Object>();//variables.put("day",4);variables.put("leaderResult", 1);//完成任务this.processEngine.getTaskService().complete(taskId, variables);System.out.println("领导审核完毕........");}//经理审批public void completeJingliTask(Task task){//获取任务idString taskId = task.getId();String name = task.getName();//经理意见Map<String, Object> variables = new HashMap<String, Object>();variables.put("result", 0);//完成任务this.processEngine.getTaskService().complete(taskId, variables);System.out.println("经理审核完毕........,审核经理:"+name);}

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

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

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

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

哦,对,还有一个问题,部署了多个流程变量,如何准确开启特定的流程
每个流程在定义的时候,都有一个id值,启动时便通过这个id值来启动,所以记住你设置的id值就可以啦!!!

activiti流程例子:详解员工请假流程的实现相关推荐

  1. mysql员工请假流程表字段_“员工请假”流程及在线表单开发示例

    1. "员工请假"流程及在线表单开发示例 1.1. 描述 通过本示例达到快速对F2流程管理平台的在线表单速讯上手及零编码式的开发.实现一个以请假为示例的流程及在线表单,及请假数据的 ...

  2. MySQL变量,存储过程,函数,流程控制详解(小白都能懂哦)

    1.系统变量 2.自定义变量 3.存储过程 4.函数 5.流程控制结构 1.系统变量 1.1系统变量的分类 系统变量:分为全局变量和会话变量 1.2系统变量的介绍 系统变量由系统提供,不是用户定义,属 ...

  3. 以美颜sdk为例,详解sdk接入流程

    Sdk,是可用于开发面向特定平台的软件应用程序的工具包.举个例子,如果你想组装一个模型车或飞机.在构建这个模型时,需要一整套物品去组装.sdk相当于组装它们所需的工具,包括装配说明等.在这信息化时代, ...

  4. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  5. jsapi支付签名_PHP实现微信支付(jsapi支付)流程步骤详解

    最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路. 前期准备: 1.微信认证服务号,并且开通了微 ...

  6. 怎么在手机上取消双重认证_用手机在淘宝上怎么开网店?流程步骤详解

       这是一篇关于"用手机在淘宝上怎么开网店?流程步骤详解"的文章: 开网店因为门槛低.收益大,成为众多年轻人创业的首选.很多新手朋友们都想开一家属于自己的网店,但是苦于没有经验, ...

  7. ebay注册流程_2017年eBay注册开店流程图文详解

    原标题:2017年eBay注册开店流程图文详解 今天跟大家分享最新的eBay注册开店流程,希望对卖家小伙伴们有所帮助.我们先简单了解一下eBay注册条件. 企业注册eBay需满足以下条件: 合法登记的 ...

  8. 数据仓库电商建模_真实电商数据仓库全流程开发详解,资源教程下载

    课程名称 Hadoop大数据视频教程-第一季:真实电商数据仓库全流程开发详解(共46讲),资源教程下载 课程目录 第一部分:数据仓库基础理论与技术圈 第一章:互联网电商大数据环境 第二章:商业智能与数 ...

  9. 【教程】详解VS2010安装流程

    [教程]详解VS2010安装流程 原文网址链接为:http://jingyan.baidu.com/article/4e5b3e195b838991901e24e5.html VS2010全称&quo ...

最新文章

  1. SOA和微服务之间的区别
  2. 排列、组合问题(递归)
  3. Linux/Centos源码安装python3任意版本
  4. 关于×××隧道技术在使用中的优势
  5. linux 文件夹大小_技能“慧”|初识Linux(二)
  6. maven-将依赖的 jar包一起打包到项目 jar 包中
  7. win7计算机桌面位置,win7系统更改桌面位置的操作方法
  8. 特斯拉为什么不用激光雷达和高精地图?
  9. 深度学习相关软件安装整理
  10. 3D图形渲染及数字图像处理算法相关文集
  11. 竹林七贤:没有信仰的人生有多可怕?
  12. 胡昊—第6次作业—static关键字、对象
  13. java导航网站_java导航网站
  14. Horizontally Visible Segments
  15. while(i--)和while(--i)的区别
  16. Vue2.x+Element UI 密码规则组件封装
  17. 存地失人,人地皆失;存人失地,人地皆存。
  18. 流体机械原理及设计07
  19. 千峰python线下培训
  20. GDB多线程调试(调试命令+调试演示)

热门文章

  1. java runtime是什么软件_Java SE Runtime Environment (JRE) 运行Java程序的必备软件
  2. 2019年北京理工大学计算机专硕上岸经验分享
  3. TCP BBR之Startup gain的另一种推导法以及最新进展
  4. 年薪3亿的微信之父,在任何事情上都追求极致,怎么做到的?
  5. linux使用cmake交叉编译arm32程序
  6. 雷达图人格php源码,061 实例15-霍兰德人格分析雷达图
  7. win7系统蓝屏故障以及常见的解决方案
  8. 五福题材的公众号图文排版有哪些素材?
  9. 历史库存sap_SAP 常用的库存表
  10. vue3+vant开发微信公众号网页爬坑不完全指北