1、利用flowable的时间监听器+websokect给用户发送工作提醒
@Component
public class ProcessEndListener implements FlowableEventListener {
private TaskService taskService;
private RuntimeService runtimeService;
private IActRuTaskService actRuTaskService;
public ProcessEndListener() {
this.taskService = BeanContext.getApplicationContext().getBean(TaskService.class);
this.runtimeService = BeanContext.getApplicationContext().getBean(RuntimeService.class);
this.actRuTaskService = BeanContext.getApplicationContext().getBean(IActRuTaskService.class);
}
@Override
public void onEvent(FlowableEvent event) {
FlowableActivityEvent activityEvent = (FlowableActivityEvent)event;
Map<String,Object> params = new HashMap<> ();
params.put("executionId_",activityEvent.getExecutionId());
List<ActRuTask> tasks = actRuTaskService.queryAll(params);
if(CollectionUtils.isEmpty(tasks)){
return;
}
List<IdentityLink> idList = taskService.getIdentityLinksForTask(tasks.get(0).getId_());
if (CollectionUtils.isEmpty(idList)) {
return;
}
// 获取接收人,此处从Identity获取,实际情况会更复杂
idList.forEach(identityLink -> {
if (StringUtils.isNotBlank(identityLink.getGroupId())) {
WebSocket ws = new WebSocket();
try {
ws.sendMessageTo("发送工作提醒消息"+ DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss,SSS"),identityLink.getGroupId());
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
@Override
public boolean isFailOnException() {
return false;
}
/**
* @return true则配置,false在事务内触发
*/
@Override
public boolean isFireOnTransactionLifecycleEvent() {
return true;
}
@Override
public String getOnTransaction() {
//事务提交后触发
return TransactionState.COMMITTED.name();
}
}