Camunda 实战:审批超时提醒(七)

本文详细介绍了如何利用Camunda的非中断边界事件和定时器功能创建审批超时催促功能。通过实例流程图和代码,展示了如何设置定时器触发服务任务,并确保审批流程不受影响。关键点包括流程图绘制、代码实现以及业务逻辑的执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接上一篇,我们说了,本次我们要做一个审批超时催促(提醒)的功能,我就想camunda 应该能实现,所以就研究了一下camunda的定时器和服务任务的功能,发现应该可以实现我的需求,上一篇我们讲述了camunda的定时器和服务任务的简单应用,这一篇在上一篇的基础上实现我们的功能。

我们在上篇说过:边界事件可以是中断的,也可以是非中断的。那其实可以使用非中断的边界事件。如何实现呢?
要实现这个功能以前,我也百度了一些文章,比如:
https://www.jianshu.com/p/62955f271956
比如这篇中的这个我觉得可以实现
在这里插入图片描述
那么这个流程图怎么画呢,当时也花了一些时间,这里我就直接记录了。

先贴出我的流程图:
在这里插入图片描述
图1
我们跟上以前的流程图做个对比:
在这里插入图片描述
图2
仔细看我们发现其实这里的两个定时器的图标都不一样
图1中的定时器是边界事件不中断流程,而图二中的定时器会中断流程。

我们直接来说图1 是怎么画出来的。
在这里插入图片描述

先画一个这个中间事件(空心圆)
点这个扳手
在这里插入图片描述
发现这里有一个定时器的图标:Timer Intermediate Catch Event
在这里插入图片描述
选了这个就会发现这个就跟图2 中的定时器图标一样,这个是可以中断的定时器,其实不是我们想要的,那怎么做到呢,其实很简单,如下图:

在这里插入图片描述
在这里插入图片描述
把这个圆圈拉到销售主管审批节点的边界上,我们再来点击扳手看看:
在这里插入图片描述
发现这个时候就有了这个图标:Timer Boundary Event(non-interrupting)
在这里插入图片描述
这个就是我们想要的了,接下来
在这里插入图片描述
这个定时器后面跟上我们的服务任务即可,销售主管审批后面的节点可以照常画了。这里的提醒其实是算流程以外的节点不会影响流程的运转。
再来看完整的图:
在这里插入图片描述
定时器的参数:
在这里插入图片描述
服务任务的参数:
在这里插入图片描述
接下来我们看代码,java代码其实跟上一篇的一模一样:


import lombok.extern.slf4j.Slf4j;
import org.camunda.bpm.engine.TaskService;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.camunda.bpm.engine.task.Task;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author 
 * @Desc 超时提醒监听类类
 * @Date 2022-06-01 19:51
 **/
@Slf4j
@Service("timeoutRemindDelegate")
public class TimeoutRemindDelegateListener implements JavaDelegate {

    @Resource
    private TaskService taskService;

    @Override
    public void execute(DelegateExecution execution) throws Exception {
        log.info("TimeoutRemindDelegate.execute start, execution: {}", execution);

        // 获取当前节点的所有待办任务
        List<Task> taskList = taskService.createTaskQuery()
                .processInstanceId(execution.getProcessInstanceId())
                .list();
        for (Task task: taskList) {
            String assignee = task.getAssignee();
            log.info("assignee:"+assignee);
            // 实现保存记录表,发送语音提醒或短信提醒
        }

        log.info("TimeoutRemindDelegate.execute end");
    }
}

这里就不演示了,可以结合上一篇一起看,
1.当我们发起流程后,销售主管审批的节点的审批人,如果超过1分钟没有审批就会触发这个的服务任务,就会调用我们的java代码,这个时候就可以在java代码中写发送提醒的方法了。
2.同样的主要一到销售主管审批这个节点act_ru_job就会有一条记录,到时间了就会执行java代码,执行完java代码,act_ru_job表中的记录就会消失
3.如果还没有超过1分钟审批人就审批了,其实这个时候也不会调用java代码了,act_ru_job表中的记录也会消失

好了,今天的记录就写到这里。加油

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值