Springboot集成Camunda并完成一条流程实例

💖专栏简介
✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。
✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda
✔️请给snail-camunda 点颗星吧😘
💖设计流程定义
在Modeler中设计一个简单的流程定义
Flow_1k7cbz8
Flow_1k7cbz8
Flow_1qx1hmd
Flow_1qx1hmd
Flow_1rx0p95
Flow_1rx0p95
这种是最简单的用户任务节点,该节点只允许分配一个任务给用户。

💖版本兼容
以下为版本对应表,本专栏所有案例基于Camunda 7.19.0+Spring Boot 2.7.7
|
Spring Boot Starter version |
Camunda Platform version |
Spring Boot version |
|
7.13.x 7.13.3+*** |
7.13.x 7.13.3+ |
2.2.x.RELEASE 2.3.x.RELEASE |
|
7.14.x 7.14.2+*** |
7.14.x 7.14.2+ |
2.3.x.RELEASE 2.4.x |
|
7.15.x 7.15.3+*** |
7.15.x 7.15.3+ |
2.4.x 2.5.x |
|
7.16.x 7.16.3+*** |
7.16.x 7.16.3+ |
2.5.x 2.6.x |
|
7.17.x 7.17.2+*** |
7.17.x 7.17.2+ |
2.6.x 2.7.x |
|
7.18.x 7.19.x |
7.18.x 7.19.x |
2.7.x |
|
7.20.x |
7.20.x |
3.1.x |
💖创建项目
新建SpringBoot项目后引入相关的场景启动器
org.camunda.bpm.springboot
camunda-bpm-spring-boot-starter
7.19.0
org.camunda.bpm.springboot
camunda-bpm-spring-boot-starter-webapp
7.19.0
mysql
mysql-connector-java
在properties或yml文件中进行相关属性值配置
###数据源相关配置 spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true spring.datasource.username=root spring.datasource.password=root ###Camunda相关配置 #关闭自动部署 camunda.bpm.auto-deployment-enabled=false camunda.bpm.history-level=full camunda.bpm.admin-user.id=demo camunda.bpm.admin-user.password=demo camunda.bpm.admin-user.first-name=demo camunda.bpm.filter.create=All tasks
Camunda的自动部署路径是【classpath*:**/*.bpmn20.xml 】,所以我们在resources目录下新建名称为bpmn的文件夹,用于放置设计的流程定义。

之后按照部署流程定义、发起流程实例、完成任务的顺序来完成。为方便演示,这里省略分层,代码在Controller中完成。
/**
* 流程定义相关接口
* @author lonewalker
*/
@RequestMapping("/process/definition")
@AllArgsConstructor
@RestController
public class ProcessDefinitionController {
private final RepositoryService repositoryService;
/**
* 部署流程定义
*
* @return 提示信息
*/
@PostMapping("/deploy")
public String deployProcessDefinition(){
repositoryService.createDeployment()
.addClasspathResource("bpmn/1.bpmn")
.name("演示")
.deploy();
return "部署成功";
}
}
/** * 流程实例相关接口 * * @author lonewalker */@RequestMapping("/process/instance")@RequiredArgsConstructor@RestControllerpublic class ProcessInstanceController { private final RuntimeService runtimeService; private final TaskService taskService; /** * 根据流程定义key发起流程实例 * * @param requestParam 请求参数 * @return 流程实例id */ @PostMapping("/startProcessInstanceByKey") public String startProcessInstanceByKey(@RequestBody StartProcessRequest requestParam) { Map paramMap = new HashMap(4); paramMap.put("initiator", "10086"); paramMap.put("manager", "10087"); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(requestParam.getProcessDefinitionKey(), requestParam.getBusinessKey(), paramMap); return processInstance.getProcessInstanceId(); } /** * 完成单个任务 * * @param requestParam 请求参数 * @return 任务所在节点信息 */ @PostMapping("/completeSingleTask") public Boolean completeSingleTask(@RequestBody @Validated CompleteTaskRequest requestParam) { taskService.complete(requestParam.getTaskId()); return true; }}发起流程实例的参数类,这里省略了get、set方法,大家可以使用lombok
/**
* @author lonewalker
*/
@Data
public class StartProcessRequest {
/**
* 流程定义key
*/
private String processDefinitionKey;
/**
* 业务key
*/
private String businessKey;
/**
* 发起人
*/
private String initiator;
}
完成待办任务的参数类
/**
* @author lonewalker
*/
@Data
public class CompleteTaskRequest {
@NotBlank(message = "流程实例id不能为空")
private String processInstanceId;
@NotBlank(message = "任务id不能为空")
private String taskId;
}
💖测试接口
启动项目后会自动生成49张表

访问localhost:端口号 可以看到camunda的webapp页面,输入配置的账号、密码

调用部署接口后,来到驾驶舱中可以看到已经部署成功。

紧接着发起流程实例,所需的processDefinitionKey参数,也就是bpmn文件中的id。当然你从驾驶舱中也可以获取到。

调用接口后,可以从驾驶舱流程实例详情页面获取Task ID

将所有待办任务依次审批即可,流程实例结束后在驾驶舱是无法查看的:


本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/632203ea9f.html
