实际业务中,客户提出了一个超时自动审批的需求,即当一个任务在一个节点停留了${var}时间后,需要自动将流程给审批了(定时器事件触发后,模拟将任务执行完成,之后还按照原来的流程走向执行(即boundarytimer的Cancel Activity设置为false,流程图中的表现形式为”虚线时钟”))。
然而在使用过程中,监听不到 给boundarytimer配置了ExecutionListener的start和end事件!

不知道是使用方式有问题,还是如何,被卡在这个地方卡了许久,都没有实现需求,如果有知道正确使用的同学,可以留言分享学习一下。

方法一
于是采用了一个间接实现的方法,流程图如下:

这种方式的处理思路就是,给”超时自动审批”flow绑定一个take事件,当take事件触发时,模拟将任务给处理掉,绑定的listener代码如下:

@Service("flowTakeAutoComplete")
public class FlowTakeAutoCompleteListener implements ExecutionListener {@Autowiredprivate TaskService taskService;@Overridepublic void notify(DelegateExecution execution) throws Exception {String processKey = execution.getProcessDefinitionId().split(":")[0];String activityId = execution.getCurrentActivityId();String procInstId = execution.getProcessInstanceId();List<Task> taskList = taskService.createTaskQuery().processInstanceId(procInstId).taskDefinitionKey(activityId).list();taskList.stream().forEach((Task t) -> {String taskId = t.getId();String assignee = t.getAssignee();//如果任务没有“认领”,默认第一个人认领if (Objects.isNull(assignee)) {List<IdentityLink> identityLinkList  = taskService.getIdentityLinksForTask(taskId);if(identityLinkList != null && identityLinkList.size() > 0) {taskService.claim(taskId,identityLinkList.get(0).getUserId());}}//自动完成taskService.complete(taskId);});}
}

方法二
给流程定义增加一个全局的事件监听,用来监听定时任务job的TIME_FIRE事件,流程如如下:

流程定义xml片段如下:

 <process id="boundarytimerLeave" name="boundarytimerLeave" isExecutable="true"><extensionElements><activiti:eventListener events="TIMER_FIRED" entityType="job" delegateExpression="${jobTimeFiredAutoCompleteListener}"></activiti:eventListener></extensionElements>............省略.......

监听listener的java代码如下:

public class JobTimeFiredAutoCompleteListener implements ActivitiEventListener {@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate TaskService taskService;@Overridepublic void onEvent(ActivitiEvent event) {switch (event.getType()){case TIMER_FIRED:String procInstId = event.getProcessInstanceId();List<String> activitiIds = runtimeService.getActiveActivityIds(event.getExecutionId());List<Task> taskList = taskService.createTaskQuery().processInstanceId(procInstId).taskDefinitionKey(activitiIds.get(0)).list();taskList.stream().forEach((Task t)-> {String taskId = t.getId();String assignee = t.getAssignee();//如果任务没有“认领”,默认第一个人认领if (Objects.isNull(assignee)) {List<IdentityLink> identityLinkList  = taskService.getIdentityLinksForTask(taskId);if(identityLinkList != null && identityLinkList.size() > 0) {taskService.claim(taskId,identityLinkList.get(0).getUserId());}}//自动完成taskService.complete(taskId);});break;default:}}@Overridepublic boolean isFailOnException() {return false;}
}

activiti-超时自动审批相关推荐

  1. java超时自动关闭_[Java教程]web页面超时自动退出方法_星空网

    web页面超时自动退出方法 2017-05-18 0 思路: 使用 mousemover 事件来监测是否有用户操作页面,写一个定时器间隔特定时间检测是否长时间未操作页面,如果是,退出: 具体时间代码如 ...

  2. CentOS7 服务器连接超时自动断开问题解决

    CentOS7 服务器连接超时自动断开问题解决 参考文章: (1)CentOS7 服务器连接超时自动断开问题解决 (2)https://www.cnblogs.com/laramia/p/112686 ...

  3. 订单超时自动取消3种方案——我们用这种!

    大家好,大家对电商购物应该都比较熟悉了,我们应该注意到,在下单之后,通常会有一个倒计时,如果超过支付时间,订单就会被自动取消. 下单 今天,我们来聊聊订单超时未支付自动取消的几种方案. 1.定时任务 ...

  4. oracle连接超时是什么意思,oracle连接超时自动断开问题

    今天接到客户电话,描述新建的oracle 11.1.0.7 RAC数据库中,当一个用户连接到数据库上以后,如果在某一段时间内没有任何动作的话,该进程就会自己中断,这样在应用程 序就会因为进程超时自动断 ...

  5. Python线程超时自动终止 | Python利用ThreadPoolExecutor实现对多线程的超时自动终止 | Python3实现单线程超时自动强制停止

    文章目录 1. 按 2. 实测代码 1. 按 Python多线程适用于IO密集型的应用场景,与进程不同的是多线程对计算机资源的占用较少.对于Python自带的模块,threading未实现线程池,co ...

  6. linux控制台超时自动注销

    仅让root用户超时退出: 编辑/root/.bash_profile文件,添加 export TMOUT=300 #300秒超时自动退出root 对所有用户设置自动注销: vi /etc/profi ...

  7. 等保测评之服务器未配置登录失败锁定策略及登录连接超时自动退出策略

    等保测评之服务器未配置登录失败锁定策略及登录连接超时自动退出策略 真是一事未完又来一事哈,昨天收到的等保测评出现了好多的问题,这里将部分问题做一下记录 看看问题 问题如下 测试服务器 主要是测试服务器 ...

  8. 阿里国际站RTS产品限时整改超时自动下架怎么处理?

    小伙伴们如果最近有看阿里国际站的产品管理,那么你会发现好多RTS产品出现了红色提示,产品被标记为"待整改Ready to Ship(限时整改,超时自动下架)" 待整改Ready t ...

  9. linux 连接自动断开时间,两种解决SSH连接Linux超时自动断开的方法

    引言 个人在工作中经常用xshell远程登录服务器进行各种操作,但因为生产服务器环境变量和ssh配置不尽相同,也造成了工作上的一些不便,比如正在进行中的工作中断,需要重新连接-- 解决ssh连接Lin ...

  10. 小飞鱼软件 通达OA工作流超时自动结束程序

    在实际使用流程时,总有一些人点开流程看一下就完事了,特别是最后一步办理的人,这个大家都懂的.可是程序就会一直在那挂着显示未执行完成. 基于这样的使用场景,这次通过将上次超时自动转交的程序改造了一下,设 ...

最新文章

  1. Maya阿诺德室外环境灯光照明和渲染技术学习视频教程
  2. 后台服务项目的白盒测试之旅
  3. 《LeetCode力扣练习》第3题 C语言版 (做出来就行,别问我效率。。。。)
  4. iphone连上wifi却上不了网_必收藏为什么手机信号满格,却上不了网,4招为你解决...
  5. 判断是不是一个数组?
  6. Python实现打印螺旋矩阵功能的方法
  7. ARM嵌入式系统malloc的实现(C源码)
  8. python安装多个版本_Mac安装多个python版本
  9. nodejs核心模块fs删除文件_用 NodeJS 重命名系统文件
  10. Oracle学习 第26天 Toad试用感受
  11. SpringMvc的 @Valid 拦截到的异常如何抛出
  12. JavaScript文档,JQuery文档,CSS中文文档下载
  13. Linux命令--vi(编辑或查看文件内容)
  14. java虚拟机带键盘安卓版下载。_jvm1.5官方下载
  15. VHDL:设计一个四位并行加法器和16位ALU(代码思路清晰易懂)
  16. Base64 编码整理
  17. 回头再说012 盘点我的2008年
  18. 2019年高新企业申报苏州企业财务工作部署重点
  19. 142、解密POE交换机供电秘密,8芯网线断芯不再害怕!
  20. 用装饰者模式 动手写一个导弹系统组装功能(滑稽+1)

热门文章

  1. was英文读音_英语单词was怎么读
  2. 135编辑器点击换图html,这5种换图姿势,只有排版高手才会!
  3. 【实操】下载在线m3u8视频为本地mp4
  4. Banner尺寸多大最好!
  5. On-premise是什么意思?
  6. 京东获取商品历史价格信息 API
  7. 双系统安装的linux找不到了,双系统,安装linux时找不到硬盘!?
  8. 机器学习(三):如何理解最大似然估计MLE与最大后验估计MAP
  9. 从零开始做单相逆变电源(软件)
  10. Linux下安装maven3.6.2遇到的问题