camunda工作流使用和api
一:先画流程图,如下
流程图详解如下:
子流程详解如下:
申请人详解:
专业核查详解:
核查不通过详解:
核查通过:
二:代码实现
1.添加依赖
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
<version>7.15.1</version>
</dependency>
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter</artifactId>
<version>7.15.1</version>
<exclusions>
<exclusion>
<artifactId>mybatis</artifactId>
<groupId>org.mybatis</groupId>
</exclusion>
</exclusions>
</dependency>
2.yml配置
# BPM========================================================================
camunda:
bpm:
process-engine-name: route-bpm
auto-deployment-enabled: false
admin-user:
id: demo1 #登陆用户
password: demo1 #密码
database:
schema-update: true #true:数据库添加bpm表,第一次添加表即可,后续改成false
job-execution:
enabled: false
metrics:
enabled: false
db-reporter-activate: false
3.部署刚才画的流程图
@GetMapping("/addWorkFlow")//把流程图放在resource/bpm文件下
public Result addWorkFlow1() {
//读取流程文件,获取文件输入流
String fileName = "diagram_2_12_31.bpmn";
InputStream inputStream = BpmController.class.getResourceAsStream("/bpm/" + fileName);
//获取Deployment对象
Deployment deployment = repositoryService.createDeployment()
.name("diagram_2_12_31")
.addInputStream(fileName, inputStream)
.deploy();
if (deployment != null) {
System.out.println("部署id:" + deployment.getId());
}
return Result.success();
}
4.业务可以发起流程了
三:api调用
1.启动流程
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
//开始发起流程。
//businessKey:代表每个流程的id,如:modelRecordsKey-1
//variables:存流程变量,如:
String businessKey="modelRecordsKey-1";
ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();//查询该条流程图是否存在
if (process != null) {
throw new ParamsException("流程已提交,可返回主页");
}
Map<String, Object> variables = new HashMap<>();
variables.put("applyUser","张三");
variables.put("platformList", new arrayList());//集合代表子流程集合
ProcessInstance processInstance = this.runtimeService.startProcessInstanceByKey("modelRecordsKey", businessKey, variables)
//查询发起的子流程详情(这个集合数量等于platformList的数量)
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).list();
variables.clear();
for (int i = 0; i < taskList.size(); i++) {
//每个子流程对应的审核用户
taskService.setVariable(taskList.get(i).getId(),"accountList", new arrayList());
//提交即可,每个子流程都会有自己的待办(用的是并行会签)
taskService.complete(taskList.get(i).getId());
}
2.分页查询待办
//查询待办总数
long count = this.taskService.createTaskQuery().taskAssignee("当前登陆人").count();
if (count == 0) {
return ;
}
//获取个人代办
int page = (current - 1) * pageSize;
int limit = pageSize;
List<Task> taskUserList = this.taskService.createTaskQuery().taskAssignee(assignee).orderByTaskCreateTime().desc().listPage(page, limit);
2.分页查询已办
long count = historyService.createHistoricTaskInstanceQuery().taskAssignee(assignee).taskDefinitionKey("Activity_04t7pw1").finished().taskDeleteReason("completed").count();
if (count == 0) {
return PageUtil.getPage(current, pageSize, 0, null);
}
// 3、查询记录
int page = (current - 1) * pageSize;
int limit = pageSize;
List<HistoricTaskInstance> historyList = historyService.createHistoricTaskInstanceQuery()
.taskAssignee("当前登陆人") //当前登陆人
.taskDefinitionKey("Activity_04t7pw1") //流程id
.finished()
.taskDeleteReason("completed")//当前人审核的已办
.orderByHistoricTaskInstanceEndTime().desc()
.listPage(page, limit);
4.审核人提交
Map<String,Object> map=new HashMap<>();
map.put("checkYes",type);//审核流程变量
map.put("noCheck","0");//默认审核通过
if(type.equals("2")){
map.put("noCheck","1");//审核不通过
}
this.taskService.complete(taskId,map);//提交即可。taskId代表待办任务的id
5.其他api
//根据任务id查询该条流程实例。对象有这个流程id和key和名称
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
//删除代办(是否删除已办需要尝试)
historyService.deleteHistoricTaskInstance(task.getId());
//删除流程图(根据act_re_deployment表id删除流程图)
this.repositoryService.deleteDeployment(deploymentId, true);
//查询单个任务(act_ru_task代办任务表)
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
//流程中再添加子流程
ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
List<String> accountList=new ArrayList<>();
runtimeService.createProcessInstanceModification(process.getProcessInstanceId())
.startBeforeActivity("Activity_1ufn5b4")//注意是:子流程id
.setVariableLocal("applyUser","q")//添加变量,全局都会存在,且不会被覆盖
.setAnnotation("申请人").execute();
List<Task> taskList = taskService.createTaskQuery().processInstanceId(process.getProcessInstanceId())
.taskAssignee("q").taskName("申请人").orderByTaskCreateTime().desc().list();//查出刚新建的子流程的所有任务
Task task = taskList.get(0);//取出最后一个任务
Map<String, Object> variables = new HashMap<>();
variables.put("accountList",accountList);
variables.put("platform",platform);
taskService.complete(task.getId(),variables);//申请人提交流程
四:流程图页面地址
http://localhost:8088/camunda/app/welcome/default/#!/login