SpringBoot集成流程引擎实战,画流程图及流程启动篇(超详细)

SpringBoot集成流程引擎实战,画流程图及流程启动篇(新手向,超详细)


前言:根据若依-流程引擎项目学习,需要完整代码请跳转至

https://gitee.com/shenzhanwang/RuoYi-activiti

用户任务(userTask) 代码和画图对应

流程启动的代码在下面,可以对照着画图好理解

leave为整个流程的标识,启动流程的时候就会传入流程标识

applyuserid为发起人的id,applyleave为流程节点的id,业务上可以通过该id查询处于该节点下的所有流程任务
applyuserid为发起人的id,applyleave

deptleader为部门领导的id,deptleaderaudit为流程节点的id,业务上可以通过该id查询处于该节点下的所有流程任务

hr为人事的id,hraudit为流程节点的id,业务上可以通过该id查询处于该节点下的所有流程任务

发起流程 代码

@Service
public class ActivitiServiceImpl implements ActivitiService
{

    @Resource
    private RuntimeService runtimeService;

    @Resource
    private TaskService taskService;

    @Resource
    IdentityService identityService;

    @Resource
    HistoryService historyService;

	/**
     * 发起流程
     * @param userId 流程发起人
     * @param key 业务表的唯一值
     * @param deptleader 部门领导的id
     * @param hr 人事的id
     */
    public void initiateProcess(String userId,String key,String deptleader,String hr)
    {
        //设置流程发起人
        identityService.setAuthenticatedUserId(userId);
        //创建流程变量
        HashMap<String, Object> variables = new HashMap<>();
        //发起人的id
        variables.put("applyuserid", userId);
        //部门领导的id
        variables.put("deptleader", deptleader);
        //人事的id
        variables.put("hr", hr);
        /**
         * 作用:启动 engineering 流程
         * 第一个参数为流程定义的key
         * 第二个参数为流程的唯一标识(一般和业务表的唯一标识一致,方便查询)
         * 第三个参数为流程变量(我这里只是用于存储审核人)
         */
        runtimeService.startProcessInstanceByKey("leave", key, variables);
    }
    }

网关(sequenceFlow) 代码和画图对应

流程启动的代码在下面,可以对照着画图好理解

网关 会根据流转条件走对应的用户任务 如带的false就会走调整申请的流程

网关 会根据流转条件走对应的用户任务 如带的true就会走调人事审批

用户审核 代码

	/**
     * 审核任务
     * @param taskId 任务id
     * @param userName 审核人名称
     * @param variables 请求参数{"approve": "false","comment": "不通过"}
     * @return
     */
    @Override
    public void auditingTask(String taskId, String userName, Map<String, Object> variables) {
		//设置代理(审核人)
        taskService.setAssignee(taskId, userName);
        // 通过任务id 查出流程实例id
        String processInstanceId = taskService.createTaskQuery().taskId(taskId).singleResult().getProcessInstanceId();
        if (variables == null) {
            taskService.complete(taskId);
        } else {
            // 添加审批意见
            if (variables.get("comment") != null) {
                taskService.addComment(taskId, processInstanceId, (String) variables.get("comment"));
                variables.remove("comment");
                variables.remove("taskId");
            }
            //提交任务
            taskService.complete(taskId, variables);
        }
    }

以上就是基础的画流程图及初步使用java执行流程引擎

### 如何在 Spring Boot 中实现审批流程 #### 1. 添加依赖项 为了在Spring Boot应用中集成Camunda BPM并创建审批流程,需先添加必要的Maven或Gradle依赖。对于Camunda而言: ```xml <dependency> <groupId>org.camunda.bpm.spring.boot</groupId> <artifactId>camunda-bpm-spring-boot-starter</artifactId> <version>版本号</version> </dependency> ``` 而对于Activiti,则应加入如下依赖[^2]。 #### 2. 启动类配置 在项目的启动类上添加`@EnableProcessApplication`注解来激活Camunda引擎。这一步骤确保了当应用程序启动时会自动初始化Camunda环境,并准备好接收新的业务流程实例请求[^1]。 ```java import org.camunda.bpm.spring.boot.starter.annotation.EnableProcessApplication; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableProcessApplication public class CamundaApplication { public static void main(String[] args) { SpringApplication.run(CamundaApplication.class, args); } } ``` #### 3. 修改配置文件 编辑`application.properties`或`application.yml`文件以适应特定需求,比如设置数据库连接参数等。这对于持久化存储流程定义及其运行时数据至关重要[^3]。 #### 4. 创建流程模型 利用Camunda Modeler工具绘制所需的业务流程图(BPMN),并将该XML描述保存到资源路径下的适当位置。此步骤涉及设计具体的审批逻辑,如条件分支、人工任务节点分配等。 #### 5. 部署与调用流程 编写服务端接口以便于前端提交新申请或将待办事项指派给指定用户处理。通常情况下,这些API将负责解析传入的数据包,映射至对应的实体对象后触发相应的工作流事件。 #### 6. 错误恢复机制 考虑到实际应用场景中的不确定性因素,在执行敏感操作之前应当做好充分的状态校验准备;一旦遇到意外情况发生,可通过事务管理器的帮助完成回滚动作从而维持系统的稳定性[^4]。 ```java try { // 执行加签操作 performAddSign(taskId, newAssignee); } catch (Exception e) { // 发生异常,进行状态回滚 transactionManager.rollback(status); throw new RuntimeException("加签操作失败", e); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值