实际业务中,客户提出了一个超时自动审批的需求,即当一个任务在一个节点停留了${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. nvidia显卡cuda的性能_性能追平上代万元旗舰!NVIDIA GeForce RTX 3070规格解析
  2. mongodb环境安装
  3. 解决: Elements in iteration expect to have ‘v-bind:key‘ directives
  4. 今天诛仙3服务器维护么2014年4月27,诛仙2021年3月4日更新维护公告 诛仙2021年3月4日更新维护内容一览_手心游戏...
  5. “不懂 CPU 工作原理又如何,直接用代码模拟一个!”
  6. 算法:动态规划 最大连续子数组和 Maximum Subarray
  7. iF.svnadmin安装部署
  8. Navicat 安装配置
  9. Python Pandas库教程
  10. 你的格局决定你的结局
  11. office教程:如何给excel表格重命名工作表
  12. C++ day22 继承(二)基类指针数组通过虚方法实现智能的多态
  13. android 启动app过程,应用程序进程启动过程
  14. 计算机网络-HTTP协议
  15. 技嘉主板大部分型号开启WOL(Wake up-On-LAN)网络唤醒与定时开机
  16. 罗技K580键盘快捷键(ipad)
  17. 小米移动流量显示无服务器,小米移动电话卡详解!打电话、上网流量无敌
  18. vscode配置护眼色
  19. 达梦7数据库安装教程
  20. 什么是微型计算机组成原理,SJTU 《微型计算机组成原理》备考题

热门文章

  1. 从零实现HarmonyOS(鸿蒙)运动手表两个游戏的合并
  2. mysql修改my.ini_MySQL配置文件(my.ini)详解
  3. TOP100summit分享实录 | 网易卡爷:实战解读增长黑客在 B 端业务中的应用
  4. 蓝桥杯第四届决赛 c++ B组 题目及个人题解 2013年
  5. mysql怎么设置不要密码_mysql无密码怎么设置密码
  6. c语言生成excel文件简书,iOS 生成Excel xlsx文件
  7. 超立方体结构图计算机系统,科学网—超立方体或将构成纳米计算机
  8. 搞笑--网络小说-紫川 高考题-(附答案)
  9. SSD,eMMC,UFS的区别
  10. python:如何删除一数组中包含7和7的倍数的数