Activiti定时任务

作者:Jesai

傻逼一样的去坚持,就会有牛逼的结果

情景:

某公司有一个OA系统,审批环节是经理。有一天,经理出差了,然后下面突然有一份决定公司某个重大项目是否能顺利中标的决策需要呈批请示。但是刚好这个经办的员工不知道经理已经出差(或者这个呈批必须要经过经理审批的环节,没有跳过,也没有转发)。巧了,刚好这个经理出差的时候,没有委托任何人来办理这个事情。然后这个呈批就卡死在经理的环节上面没有人办理了。怎么办?问经理要密码?重新发起一个呈批?如果这样子做的话,说明这个OA系统的流程还不够灵活,需要管理员或者人工手动去协调系统。

 

方案:

那么我们可以设置Activiti的定时任务。一旦超过这个办理的期限,那么,流程就会自动执行一些操作。下面我做的一个方案是一旦超过了办理期限,系统自动发送邮件提醒办理者。

 

要素:

(1)定时任务边界

(2)定时任务时间

(3)超时处理

 

Activity定时任务,需要启用JOB模块:

 

   <!-- 定时任务 -->
<property name="jobExecutorActivate" value="true" />

这里如果设置为false,是不会触发定时任务的。

 

设计流程:

 

流程部分代码:

 <boundaryEvent id="sid-2C3A3C84-B2E4-4B29-A319-0AFBC17544F0" attachedToRef="sid-C8781FAE-02B8-4F8D-9A7D-A8AB4A8CB95A" cancelActivity="false">

 <timerEventDefinition>

 <timeDate>2016-06-04T15:03:00</timeDate>

 </timerEventDefinition>

 </boundaryEvent>

 <serviceTask id="sid-F8D7E189-DB9F-49C2-87D6-D466398A889E" name="超时发送邮件" activiti:type="mail">

 <extensionElements>

 <activiti:field name="to">

 <activiti:string>763630473@qq.com</activiti:string>

 </activiti:field>

 <activiti:field name="from">

 <activiti:string>763630473@qq.com</activiti:string>

 </activiti:field>

 <activiti:field name="subject">

 <activiti:string>待办超时</activiti:string>

 </activiti:field>

 <activiti:field name="text">

 <activiti:string>你有一个待办任务已经超时。</activiti:string>

 </activiti:field>

 </extensionElements>

 </serviceTask>

超时的时间设置(其中一种)

(1)需要设置经理节点

(2)设置超时任务边界的时间

 

说明:

(1)必须要设置一个时间,否则任务不执行

(2)取消活动为true,那么超时会直接取消这个流程活动,为false,不取消

(3)关于时间设置

Main config中的数据格式均为:ISO_8601格式:(P ,Y,M,W,D,T,.H,M,S)或 cron时间格式:

 

Iso_8601格式:

 

-----Time duration:延时多长时间后触发。例:P10D 表示10天以后触发

 

-----time date:什么时间触发。例:2011-03-12T12:12:23 表示在2011年03 月12日 12:12:23触发

 

      ---time cycle:循环规则:

 

R【循环次数】【/开始时间】/时间间隔【/结束时间】。

 

例:R3/PT10 表示重复3次,每次间隔10小时

 

  从2004年5月6日北京时间下午1点起时间间隔半年零5天3小 时循环,且循环3次,可以表示为  

R3/2004-05-06T130000+08/P0Y6M5DT3H0M0S。

 

以1年2个月为循环间隔,无限次循环,最后循环终止于2025年1    月1日,可表示为R/P1Y2M/2025-01-01

 

 

 

Cron 时间格式:seconds minutes hours day-of -mouth mouth,day-of-week year

 

其中*表示这个域上所有的合法值

 

例:0 * 17 * * ? 表示每天下午5点到5:59每分钟触发一次

 

?表示不指定该域上的值(只能用在日域或周域上,且不能同时在两 个域上使用,即假如在在其中的一个域上指定了值,必要再另一 个上放?)

 

,表示在某个域上指定一个值列表

 

例:0 10,44 14 ? 3 WEB  表示三月中每个星期三的下午2:10 和下午的2:44触发

 

- 表示在某个域上指定一个值范围

 

例:0 45 3-8 ? * * 表示上午3点到上午8点的45分时触发

 

m/n 表示某个域的值从m开始,按n递增

 

例:0/15 0/30 * * * ? 表示整点和半点时每15秒触发

 

L 表示某个域上允许的最后一个值(只能用在日域和周域上,用在 日域上时,表示当月的最后一天触发;用在周域上,表示周的最 后一天,即周六触发)

 

例:0 0 12 ? * 2L 表示每个月中的最后一个星期一的12:00触发

 

W 表示里指定日期最近的工作日(只用在日域上,其只能指定单天, 不能指定范围或列表)

 

例:在日域上指定15W,那么如果15号是工作日,就在15号 触发

 

如果15号是周六,就在14号触发

 

如果15号是周日,就在16号触发

 

# 表示月份中的第几周的哪一天(只用在周域上)

 

例:6#3 表示某个月的第三个星期五

 

最后执行:

Activiti交流QQ群:634320089

关于邮件任务我之前已经说过,就不重复!

Activiti定时任务的更多相关文章

  1. activiti学习总结

    Activiti界面元素的使用总结 一.图形设计中元素的使用 1.SequenceFlow:连接线,可以连接两个任务,来管理流程实例的流向 -----General -----id:流程的id,用与程 ...

  2. activiti 引擎 数据库设计说明书

    1.结构设计 1.1.    逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...

  3. Activiti工作流学习-----基于5.19.0版本(2)

    二.activiti.cfg.xml的其他bean节点配置 2.1 新特性:Job Executor和Async Executor 从5.17.0版本的activiti开始提供作业执行者(Job Ex ...

  4. activiti框架 数据库设计说明

    1.结构设计 1.1.    逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...

  5. 基于Activiti的流程应用开发平台JSAAS-WF V5.3

    第1章 产品概述及体系架构 1.1.概述 红迅JSAAS-WF工作流平台V5是广州红迅软件有限公司面向合作伙伴以及有IT运维团队中大型企业提供新一代的流程管理产品,它基于流行的JAVA开源技术上构建, ...

  6. activiti数据库表结构剖析

    1.结构设计 1.1.    逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...

  7. activiti 基础

    一:activiti 入门 作者:fenng 商丘 工作流(Workflow) 就是业务过程的部分或整体在计算机应用环境下的自动化主要解决的是"使在多个参与者之间按照某种定义的规则传递文档, ...

  8. 【原】Spring activiti 环境搭建之数据库创建

    由于在开发工作流的时候,避免不了要保存一些数据和流程走向;所以在搭建Spring activiti开发环境的时候需要把官方提供的23张表创建到我们的DB,后续的流程都会在这些表中记录. 1.创建代码如 ...

  9. Activiti工作流学习要点

    1. 1个插件 在Eclipse中安装Activiti插件,让你可以在Eclipse中绘制Activiti工作流图 2. 1个引擎 ProcessEngine对象,Activiti工作流引擎.这是Ac ...

随机推荐

  1. P1004 奶牛与牧场

    题目描述 有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供 \(a\) 头牛吃 \(b\) 天,或可供 \(c\) 头牛吃 \(d\) 天,那么,这片牧场每天新生的草量最多可供几头牛吃1天? 输 ...

  2. 一道非常棘手的 Java 面试题:i++ 是线程安全的吗

    转载自  一道非常棘手的 Java 面试题:i++ 是线程安全的吗 i++ 是线程安全的吗? 相信很多中高级的 Java 面试者都遇到过这个问题,很多对这个不是很清楚的肯定是一脸蒙逼.内心肯定还在质疑 ...

  3. python 多线程两种实现方式,Python多线程下的_strptime问题,

    python 多线程两种实现方式 原创 Linux操作系统 作者:杨奇龙 时间:2014-06-08 20:24:26  44021  0 目前python 提供了几种多线程实现方式 thread,t ...

  4. c# 写个简单的爬虫。注:就一个方法,没有注释,自己猜~哈哈

    和我,在成都的街头走一走,哦~喔~哦~ public JsonResult GetHtml() { string url = "http://www.xxxxxxxxxxxxxxxxxx.c ...

  5. Maven工程

    maven:父子工程 1,父工程并没有实质性的内容,所有的jar包都在里面,也就是说只需要管理jar包即可,不参与任务方法逻辑 2,在父工程中拥有很多的子模块,每一个子模块都代表了不用的包如(pack ...

  6. PLsql下载官网下载地址

    https://www.allroundautomations.com/registered/plsqldev.html

  7. 牛客训练赛55 E 树

    很妙的一个树形DP问题,简单考虑了一下就过了 https://ac.nowcoder.com/acm/contest/2927/E 主要就是推公式(公式有点长呀) 大概就是这样,其实挺简单的. #in ...

  8. SpringBoot入门简易教程

    使用SpringBoot来开发一个简单的restful api网关功能,目标:实现对SpringBoot的简单入门. 1. 创建SpringBoot项目 可以通过spring官网(https://st ...

  9. vue-perview插件的使用方法

    先给连接: https://github.com/LS1231/vue-preview   这是插件的文档 从文档中可以看出该插件已经值支持vue2.5以上了 安装: 引用 examples 注意: ...

  10. ASCII、UNICODE、UTF

    在计算机中,一个字节对应8位,每位可以用0或1表示,因此一个字节可以表示256种情况. ascii 美国人用了一个字节中的后7位来表达他们常用的字符,最高位一直是0,这便是ascii码. 因此asci ...