专栏首页JAVA后端开发flowable实现节点超时自动跳过(二)-------工作日节点超时跳过

flowable实现节点超时自动跳过(二)-------工作日节点超时跳过

之前写过一个文章flowable实现节点超时自动跳过实现了流程超时自动跳过的功能. 但后面有朋友问我,能不能实现一个工作日自动跳过的功能,当前跳过,是非节假日的. 后面翻了一下flowable的源码,发现其实实现也是不难的.

  1. 首先要有一个节假日的接口,这个需要第三方提供, 该接口传入一个当前时间,及超时天数,计算需要超时跳过的时间.
  2. 重写日历时钟的配置,示例代码如下:
@Bean
    public EngineConfigurationConfigurer<SpringProcessEngineConfiguration> customIdGeneratorConfigurer() {
        return engineConfiguration -> {
            engineConfiguration.setIdGenerator(customIdGenerator());
            engineConfiguration.setActivityBehaviorFactory(activityBehaviorFactory());
            engineConfiguration.setTransactionManager(transactionManager);
            //设置全局事件监听
            engineConfiguration.setTypedEventListeners(this.getGlobalFlowableEventListener());
            //需要先初始化时钟
            engineConfiguration.setClock(new DefaultClockImpl());
            //自定义工作日历
            engineConfiguration.setBusinessCalendarManager(this.getBusinessCalendarManager(engineConfiguration.getClock()));
        };
    }


    /**
     * 初始化日历
     * @param clock 时钟
     * @return 日历实现
     */
    private  MapBusinessCalendarManager getBusinessCalendarManager(Clock clock) {

            MapBusinessCalendarManager mapBusinessCalendarManager = new MapBusinessCalendarManager();
            mapBusinessCalendarManager.addBusinessCalendar(DurationBusinessCalendar.NAME, new DurationBusinessCalendar(clock));
            mapBusinessCalendarManager.addBusinessCalendar(DueDateBusinessCalendar.NAME, new AcDueDateBusinessCalendar(clock));
            mapBusinessCalendarManager.addBusinessCalendar(CycleBusinessCalendar.NAME, new CycleBusinessCalendar(clock));

            return mapBusinessCalendarManager;

    }

注意,上述代码中,AcDueDateBusinessCalendar是我重写日历超时的类

  1. 重写日历超时的类,示例如下:
public class AcDueDateBusinessCalendar extends DueDateBusinessCalendar {
    public AcDueDateBusinessCalendar(ClockReader clockReader) {
        super(clockReader);
    }

    @Override
    public Date resolveDuedate(String duedate, int maxIterations) {
        try {
            // 这里可以调用工作日接口,返回计算后的工作日时间
            if (duedate.startsWith("P")) {
                return new DateTime(clockReader.getCurrentTime()).plus(Period.parse(duedate)).toDate();
            }

            return DateTime.parse(duedate).toDate();

        } catch (Exception e) {
            throw new FlowableException("couldn't resolve duedate: " + e.getMessage(), e);
        }
    }
}

看代码上的注释,因为我手头上没有工作日的接口,先不实现,大家就按自己的需求实现即可. 至此,工作日节点超时跳过已完成.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring boot Admin禁用redis的健康检查

    当前在做项目时,发现引入了redis的包,但实际没有用到,这样导致健康检查的时候,redis那一项是红色,一直是down状态。 经网上查找,增加以下配置即可:

    星痕
  • spring cloud gateway 网关的代码配置

    在写spring cloud gateway 时,网上查的资料都是把网关的路由配置写在配置文件里,但其实,可以把配置通过代码实现 示例如下:

    星痕
  • spring secutiry密码验证的另一种解决办法(荐)

    最近在集成sping security 到spring boot中,看到大部分登陆验证的代码都这么写

    星痕
  • LeetCode96|二叉搜索树中的搜索

    这道题还是比较容易理解的,理解二叉树的特点和数据的有序性是非常有必要的,二叉树的遍历方式,二叉树的节点特点都是我们需要掌握的

    后端Coder
  • 分享丨C/C++内存管理详解--堆、栈

    因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放...

    聚沙成塔
  • 如何更愉快地使用rem —— 别说你懂CSS相对单位

    前段时间试译了Keith J.Grant的CSS好书《CSS in Depth》,其中的第二章《Working with relative units》,书中对...

    前端博客 : alili.tech
  • 稳定性三十六计-超时处理

    在传统的单机系统中,调用一个函数,要么返回成功,要么返回失败。这就是两态系统(2-state system)。

    静儿
  • Python+selenium 自动化-切换窗口页签、切换iframe框架。确定页面是否包含iframe方法。

    查看页签是否包含iframe页签。 原理:如果没有找到id为mainiframe的iframe页签就会抛出异常。

    小蓝枣
  • 回溯法浅析:逆向思维领略算法之美

    它的基本思想是假设某问题的解决步骤可能有N步,且每一步的解决方法又可能有M种,那么就按照某种顺序依次试探每一步中的各种方法,一旦某一步的所有方法都失效,那么就返...

    博文视点Broadview
  • 远程Ubuntu系统时获取Root权限

    在日常使用云服务器时,经常会遇到服务器无法获取root权限,特别是Ubuntu系统,系统在开始时,会让你采用你自定义的一个名称,类似windows10让你自己创...

    Debug客栈

扫码关注云+社区

领取腾讯云代金券