jbpm人工终止的开发

简介:

jbpm人工终止功能的开发

   人工终止即管理员在管理界面通过某种技术手段将停留在任意节点的审批中的流程终止掉。目前的需求场景是大量的如加班、请假、外出和一些行政类别的审批单停留在直接或越级主管审批(部分中层或高层的单子,其直接或越级是EMT总裁或CEO),相应审批人未及时审批,导致后续工作存在困难。

   首先将终止功能开放给系统管理员或该流程的流程管理员,流程管理员或系统管理员可以将该类型的单子终止掉,人工终止的单子属于特殊类型的单子,有所谓的死单,比如发起人已离职或该单已失效,甚至是单子是否审批通过已无关紧要;另外一部分是这种高层一般不处理的单子(之前有授权功能,高层可以将HR考勤或行政类型的单子的审批权限通过授权功能转授权他人),可由人工终止。人工终止后该单子如何处理,如流程管理员根据报表统计进一步分析处理。

   主要代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public  void  terminate(String processExecutionId) {
         ProcessExecutionEntity exe = processExecutionDao.queryById(processExecutionId);
         List<ProcessTaskEntity> taskList = processTaskService.queryByProcessExecutionId(processExecutionId);
         if (!CollectionUtils.isEmpty(taskList)){
             for (ProcessTaskEntity taskEntity : taskList){
                 if (ProcessTaskEntity.STATUS_INIT.equals(taskEntity.getStatus())){
                     taskEntity.setStatus(ProcessTaskEntity.STATUS_MANUAL_FIN);
                     taskEntity.setModifyTime( new  Date());
                     taskEntity.setFinishTime( new  Date());
                     if ( "抢办" .equals(taskEntity.getCreateUserCode())){
                         taskEntity.setCreateUserCode(OAUserContext.getUserCode());
                     }
                     taskEntity.setModifyUserCode(OAUserContext.getUserCode());
                     processTaskService.update(taskEntity);
                 }
             }
         }
         exe.setStatus(ProcessExecutionEntity.STATUS_MANUAL_FINISH);
         exe.setModifyUserCode(OAUserContext.getUserCode());
 
         exe.setModifyTime( new  Date());
         update(exe);
         jbpmOperatorService.terminate(exe.getProcessInstanceId());
         exe.setStatus( "3" );
         
         
         
     }

   以上的代码主要是针对jbpm扩展类的,在终止execution后,会查询所有的待办任务,包括会签、抢办等等,然后将所有代办全部设置为状态3,即要工终止,jbpm核心终止代码在

1
jbpmOperatorService.terminate

   以下:

1
2
3
4
5
6
7
8
9
public  void  terminate(String processInstanceId) {
         ExecutionService executionService = processEngine.getExecutionService();
         if (executionService !=  null ){
             executionService.endProcessInstance(processInstanceId,  "cancle" );
         } else  {
             
         }
         
     }

    代码全部终止后,需要修改高级查询和报表的逻辑,增加人工终止的状态。目前人工终止在业务层面主要用于类型2的,即协助高层审批非EMT层面的流程单;而死单主要通过删除的方式进行。



     本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/1766974,如需转载请自行联系原作者


相关文章
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(上)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……
|
调度 C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
|
4月前
|
Java
Flowable流程的挂起与激活详解
Flowable流程的挂起与激活详解
217 1
|
5月前
|
XML 移动开发 Java
如何启动flowable的Flowable UI画工作流程图
如何启动flowable的Flowable UI画工作流程图
109 0
|
SQL 存储 Java
Flowable 已经执行完毕的流程去哪找?
Flowable 已经执行完毕的流程去哪找?
Flowable 已经执行完毕的流程去哪找?
|
缓存 Java 应用服务中间件
Eclipse-无法执行现有代码,依旧执行以前的代码
Eclipse-无法执行现有代码,依旧执行以前的代码
504 0
|
Java 应用服务中间件 Spring
《SpringBoot启动流程四》:图文带你debug源码分析SpringApplication运行阶段和运行后阶段
《SpringBoot启动流程四》:图文带你debug源码分析SpringApplication运行阶段和运行后阶段
248 0
《SpringBoot启动流程四》:图文带你debug源码分析SpringApplication运行阶段和运行后阶段
|
缓存 分布式计算 Java
六十七、Spark-两种运行方式(本地运行,提交集群运行)
六十七、Spark-两种运行方式(本地运行,提交集群运行)
六十七、Spark-两种运行方式(本地运行,提交集群运行)
|
Java 数据库连接 API
JBPM学习(四):执行流程实例
本文主要讲执行流程实例
247 0
JBPM学习(四):执行流程实例
|
Java
【JAVA】【SpringBoot】当重新启动项目的时候,需要把用户一些状态回退,但是回退失败了,项目却没有停止,可以用System.exit(1);
【JAVA】【SpringBoot】当重新启动项目的时候,需要把用户一些状态回退,但是回退失败了,项目却没有停止,可以用System.exit(1);
361 0
【JAVA】【SpringBoot】当重新启动项目的时候,需要把用户一些状态回退,但是回退失败了,项目却没有停止,可以用System.exit(1);