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

接上一篇,我们说了,本次我们要做一个审批超时催促(提醒)的功能,我就想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表中的记录也会消失

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

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
当出现"plsqltns:连接超时"的错误提示时,通常是在使用PL/SQL连接数据库时,连接等待超过了设定的超时时间。 PL/SQL是Oracle数据库的一种编程语言,用于编写存储过程、触发器和函数等数据库对象。当使用PL/SQL连接数据库时,需要建立一个连接来进行数据交互。在建立连接时,可能会发生网络延迟或数据库服务器负载较高等情况,导致连接的建立时间超过了预设的超时时间。 连接超时的主要原因有以下几点: 1. 网络问题:连接数据库的客户端与数据库服务器之间的网络延迟或中断,导致连接建立时间超过了预设的超时时间。 2. 数据库服务器负载高:当数据库服务器的负载较高时,可能会导致连接的建立时间较长。 3. 配置问题:如果未正确配置数据库连接的超时设置,可能也会导致连接超时的错误提示。 为解决这个问题,可以采取以下措施: 1. 检查网络连接:确保数据库服务器与客户端之间的网络连接正常,没有延迟或中断。可以通过ping命令或其他网络工具进行检查。 2. 优化数据库服务器性能:根据数据库服务器的负载情况,对数据库服务器进行性能优化,以减少连接的建立时间。 3. 检查连接超时设置:确认数据库连接的超时设置是否正确,并根据实际情况进行调整。 4. 考虑增加超时时间:如果连接超时发生频繁,可以尝试增加连接的超时时间,以允许更长的连接建立时间。 总之,当遇到"plsqltns:连接超时"的错误提示时,需要综合考虑网络连接、数据库服务器性能和连接超时设置等因素,并采取相关措施来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值