Snaker工作流 添加 提醒时间与提醒间隔(reminderTime、reminderRepeat)

来源:互联网 发布:js保存cookie 编辑:程序博客网 时间:2024/06/05 15:35

项目中有集成snaker工作流,现在用户有需求,希望给每个环节设定一个 任务超时未办理的提醒 功能。一番研究,实现起来还是比较简单的:


1、依赖

snaker默认支持quartz定时器调度框架,只需要依赖snaker-quartz的包即可。


2、配置

snaker.xml中配置时限控制的拦截器、定时调度的实现类

<bean class="org.snaker.engine.impl.SchedulerInterceptor"/>
<bean class="org.snaker.engine.scheduling.quartz.QuartzScheduler"/>

如果使用其它定时调度框架,需要实现IScheduler接口,并替换QuartzScheduler类配置

以上两步已经完成了时限的配置工作,下面就可以针对提醒、超时自动执行做自定义扩展了。


3、实现

编写自定义的提醒类,实现IReminder接口。并配置到snaker.xml中即可。

<bean class="net.jqsoft.hecv.flow.service.impl.SnakerReminder" />

SnakerReminder:

import net.jqsoft.hecv.portal.CommonApiAction;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.snaker.engine.entity.Process;import org.snaker.engine.model.NodeModel;import org.snaker.engine.scheduling.IReminder;import org.zcframework.workflow.reminder.MailReminder;import java.util.Map;public class SnakerReminder implements IReminder {    private static Log logger = LogFactory.getLog(SnakerReminder.class);    public void remind(Process process, String orderId, String taskId, NodeModel nodeModel, Map<String, Object> data) {        logger.info("orderId:"+orderId);        logger.info("taskId:"+taskId);        logger.info("process:"+process.getDisplayName());        logger.info("nodeModel:"+nodeModel.getDisplayName());        for(String key:data.keySet()){            logger.info(key+":"+data.get(key));        }    }}

4、回调类

import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.snaker.engine.entity.Task;import org.snaker.engine.scheduling.JobCallback;import java.util.List;/** * Created by Administrator on 2017-4-20. */public class SnakerJobCallback implements JobCallback {    private static Log logger = LogFactory.getLog(SnakerReminder.class);    @Override    public void callback(String s, List<Task> list) {        logger.info("s:"+s);    }}

回调类的路径要配置在 工作流中!!!


5、其他

reminderTime是一个变量,表示提醒开始时间,当你调用api时需要传递此变量值,值的类型为date
reminderRepeat是一个数字,表示重复提醒间隔时间,以分钟为单位

默认提醒一次就结束,如果希望提醒多次,可通过snaker.properties中配置scheduler.repeat属性,该值是个数字,表示提醒次数。

节假日配置(snaker.properties):

#是否启用节假日,默认为false
scheduler.useCalendar=true/false
#节日配置,格式为yyyy-MM-dd,...
scheduler.holidays=2014-12-26,2014-12-27
#工作日设置,格式为1,2,3...7,表示周一至周日
scheduler.weeks=1,2,3,4,5
#工作时间设置,格式为8:00-18:00
scheduler.workTime=8:00-18:00







0 0
原创粉丝点击