博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activiti 6.x【4】activiti 基础流程demo
阅读量:7040 次
发布时间:2019-06-28

本文共 7615 字,大约阅读时间需要 25 分钟。

版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82597026

Activiti6.x 基础流程demo

接下来是一个demo了,首先,先把数据库清理一下,虽然不清理也没啥事。为了待会更直观吧。


流程图介绍:

流程图总览

这里写图片描述
网关condition设置
这里写图片描述
组设置
这里写图片描述
用户设置
【一般以流程变量形式设置办理人(把请假理解成一种任务,办理人即请假人)】
这里写图片描述

流程图代码

3}]]>

数据准备

//部署流程定义,新建数据@Testpublic void prepare() {    Deployment deployment = repositoryService.createDeployment()//创建一个部署对象            .name("请假流程")            .addClasspathResource("bpmn/MyProcess.bpmn")            .addClasspathResource("bpmn/MyProcess.png")            .deploy();    System.out.println("部署ID:"+deployment.getId());    System.out.println("部署名称:"+deployment.getName());    Group group1 = identityService.newGroup("HR");    group1.setName("HR");    group1.setType("HRassignment");    identityService.saveGroup(group1);//建立HR组    Group group2 = identityService.newGroup("ZJ");    group2.setName("ZJ");    group2.setType("ZJassignment");    identityService.saveGroup(group2);//建立ZJ组    Group group3 = identityService.newGroup("EP");    group3.setName("EP");    group3.setType("EPassignment");    identityService.saveGroup(group3);//建立员工组    //newUser传的是key【不是名字】    identityService.saveUser(identityService.newUser("HR1"));//高管    identityService.saveUser(identityService.newUser("HR2"));//高管    identityService.saveUser(identityService.newUser("ZJ"));//总监    identityService.saveUser(identityService.newUser("ZJ2"));//总监    identityService.saveUser(identityService.newUser("PTM"));//员工    identityService.createMembership("HR1", "HR");    identityService.createMembership("HR2", "HR");    identityService.createMembership("ZJ", "ZJ");    identityService.createMembership("ZJ2", "ZJ");    identityService.createMembership("PTM", "EP");}

启动流程设置流程变量【流程变量必须指定不然报错】

/**启动流程实例分配任务给个人*/@Testpublic void start() {    String userKey="PTM";//脑补一下这个是从前台传过来的数据    String processDefinitionKey ="myProcess";//每一个流程有对应的一个key这个是某一个流程内固定的写在bpmn内的    HashMap
variables=new HashMap<>(); variables.put("userKey", userKey);//userKey在上文的流程变量中指定了 ProcessInstance instance=runtimeService .startProcessInstanceByKey(processDefinitionKey,variables); System.out.println("流程实例ID:"+instance.getId()); System.out.println("流程定义ID:"+instance.getProcessDefinitionId()); }

运行结果:

这里写图片描述
【通过流程变量指定User的结果】
这里写图片描述

TaskService

查询当前人的个人任务

/**查询当前人的个人任务*/@Testpublic void findTask(){    String assignee = "PTM";    List
list = taskService.createTaskQuery()//创建任务查询对象 .taskAssignee(assignee)//指定个人任务查询 .list(); if(list!=null && list.size()>0){ for(Task task:list){ System.out.println("任务ID:"+task.getId()); System.out.println("任务名称:"+task.getName()); System.out.println("任务的创建时间:"+task.getCreateTime()); System.out.println("任务的办理人:"+task.getAssignee()); System.out.println("流程实例ID:"+task.getProcessInstanceId()); System.out.println("执行对象ID:"+task.getExecutionId()); System.out.println("流程定义ID:"+task.getProcessDefinitionId()); } }}

Query里面可以写多个查询条件类是EF的那种

这里写图片描述

完成任务

/**完成任务*/@Testpublic void completeTask(){    //任务ID    String taskId = "47506";    HashMap
variables=new HashMap<>(); variables.put("days", 4);//userKey在上文的流程变量中指定了 taskService.complete(taskId,variables); System.out.println("完成任务:任务ID:"+taskId);}

组任务查询【因为days=4所以由总监组负责】

/**查询当前人的组任务*/@Testpublic void findTaskGroup(){    //String assignee = "PTM";    List
list = taskService.createTaskQuery()//创建任务查询对象 .taskCandidateUser("ZJ")//指定组任务查询 .list(); String taskid =""; String instanceId =""; if(list!=null && list.size()>0){ for(Task task:list){ System.out.println("任务ID:"+task.getId()); System.out.println("任务名称:"+task.getName()); System.out.println("任务的创建时间:"+task.getCreateTime()); System.out.println("任务的办理人:"+task.getAssignee()); System.out.println("流程实例ID:"+task.getProcessInstanceId()); System.out.println("执行对象ID:"+task.getExecutionId()); System.out.println("流程定义ID:"+task.getProcessDefinitionId()); taskid=task.getId(); instanceId = task.getProcessInstanceId(); } } //查询组任务成员[两种方式] //List
listIdentity = taskService.getIdentityLinksForTask(taskid); List
listIdentity = runtimeService.getIdentityLinksForProcessInstance(instanceId); for(IdentityLink identityLink:listIdentity ){ System.out.println("userId="+identityLink.getUserId()); System.out.println("taskId="+identityLink.getTaskId()); System.out.println("piId="+identityLink.getProcessInstanceId()); }}

这里写图片描述

//taskService.claim(taskid,"ZJ2");//指定办理人//taskService.setAssignee(taskid, null);//回退为组任务状态

指定办理人后会变为用户任务。

/**查询当前人的组任务*/@Testpublic void findTaskGroup(){    String assignee = "ZJ2";    List
list = taskService.createTaskQuery()//创建任务查询对象 //.taskCandidateUser("ZJ")//指定组任务查询 .taskAssignee(assignee)//指定个人任务查询 .list(); String taskid =""; String instanceId =""; if(list!=null && list.size()>0){ for(Task task:list){ System.out.println("任务ID:"+task.getId()); System.out.println("任务名称:"+task.getName()); System.out.println("任务的创建时间:"+task.getCreateTime()); System.out.println("任务的办理人:"+task.getAssignee()); System.out.println("流程实例ID:"+task.getProcessInstanceId()); System.out.println("执行对象ID:"+task.getExecutionId()); System.out.println("流程定义ID:"+task.getProcessDefinitionId()); taskid=task.getId(); instanceId = task.getProcessInstanceId(); } } //taskService.claim(taskid,"ZJ2");//指定办理人 taskService.setAssignee(taskid, null);//回退为组任务状态 List
listIdentity = taskService.getIdentityLinksForTask(taskid); //List
listIdentity = runtimeService.getIdentityLinksForProcessInstance(instanceId); //runtime查询没有taskId,task查询没有InstanceId for(IdentityLink identityLink:listIdentity ){ System.out.println("userId="+identityLink.getUserId()); System.out.println("taskId="+identityLink.getTaskId()); System.out.println("piId="+identityLink.getProcessInstanceId()); }}

这里写图片描述

代码里退回为组任务【即无办理人】
这里写图片描述
【流程就结束了。记录会被移到history表里面去。】

你可能感兴趣的文章
干货 :手把手教你在试验中修正机器学习模型
查看>>
.NET Core2.1下采用EFCore比较原生IOC、AspectCore、AutoFac之间的性能 ...
查看>>
JDK8新特性之Optional
查看>>
Spark2.4.0源码分析之WorldCount 触发作业提交(二)
查看>>
Python零基础学习笔记(四十)—— datetime和Calendar ...
查看>>
事故现场:MySQL 中一个双引号的错位引发的血案 ...
查看>>
MaxCompute_UDF_开发指南
查看>>
云MSP服务案例丨某知名制造集团的Oracle RAC部署实践 ...
查看>>
如何基于ReplayKit实现低延迟rtmp推屏
查看>>
说说JSON和JSONP,也许你会豁然开朗
查看>>
没有所谓好与不好,只是能否适用和用的好
查看>>
程序员写简历时必须注意的技术词汇拼写(持续更新...)
查看>>
ams光学传感器助力小米手机创新发展
查看>>
Python 特色介绍
查看>>
JavaScript_知识点梳理note1
查看>>
PostgreSQL 开启with-llvm(JIT)后,新增插件异常(clang: Command not found)处理
查看>>
思考设计SQL优化方案
查看>>
tomcat 调优-生产环境必备
查看>>
浅析C++的引用与const指针与各种传递方式
查看>>
Java并发编程75道面试题及答案
查看>>