@Configuration
@ComponentScan(basePackages = "com.pty.workflow")
@MapperScan(basePackages = {
"com.pty.workflow.dao" }, annotationClass = MyBatisDao.class, sqlSessionFactoryRef = "pty-mybatis-session")
public class PtyWorkflowApp {
@Bean
public SpringProcessEngineConfiguration getEngineConfiguration(@Qualifier("pty-datasource") DataSource ds,
@Qualifier("pty-transactionManager") PlatformTransactionManager transactionManager,
CustomUserEntityManagerFactory customUserEntityManagerFactory,CustomGroupEntityManagerFactory customGroupEntityManagerFactory) {
SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
configuration.setDataSource(ds);
configuration.setTransactionManager(transactionManager);
List<SessionFactory> customSessionFactories = Lists.newArrayList();
customSessionFactories.add(customUserEntityManagerFactory);
customSessionFactories.add(customGroupEntityManagerFactory);
configuration.setCustomSessionFactories(customSessionFactories);
//springboot中配置全局监听类
Map<String, List<ActivitiEventListener>> typedListeners = Maps.newHashMap();
List<ActivitiEventListener> activitiEventListener = Lists.newArrayList();
activitiEventListener.add(monitorListener());
typedListeners.put("TASK_COMPLETED,TASK_ASSIGNED", activitiEventListener);
configuration.setTypedEventListeners(typedListeners);
// configuration.setJpaHandleTransaction(true);
// configuration.setJdbcDefaultTransactionIsolationLevel(2);
return configuration;
}
@Bean
public ProcessEngineFactoryBean processEngineFactory(SpringProcessEngineConfiguration configuration) throws Exception {
//configuration.setJobExecutorActivate(true);//定时任务开关
ProcessEngineFactoryBean factory = new ProcessEngineFactoryBean();
factory.setProcessEngineConfiguration(configuration);
return factory;
}
@Bean
public MonitorListener monitorListener(){
return new MonitorListener();
}
/* @Bean
public ProcessEngine processEngine(ProcessEngineFactoryBean processEngineFactory) throws Exception {
return processEngineFactory.getObject();
}*/
}
public class MonitorListener implements ActivitiEventListener{
Logger logger = org.slf4j.LoggerFactory.getLogger(MonitorListener.class);
@Autowired
private TaskService taskService;
@Override
public void onEvent(ActivitiEvent event) {
// TODO Auto-generated method stub
String processInstanceId = event.getProcessInstanceId();
logger.debug("processInstanceId {}",processInstanceId);
logger.debug("事件类型 {}",event.getType());
if(event.getType().equals(ActivitiEventType.TASK_ASSIGNED)){
ActivitiEntityEvent entityEvent = (ActivitiEntityEvent) event;
TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity();
String assignee = taskEntity.getAssignee();
if(StringUtils.isNotBlank(assignee)){
// 给assignee发信息
logger.debug("assignee {}",assignee);
}else{
// 如果走这里那说明人是候选人或者候选组
Set<IdentityLink> identityLinkList = taskEntity.getCandidates();
if(!identityLinkList.isEmpty()){
for (IdentityLink identityLink : identityLinkList) {
// 这个userid是候选用户id
String userId = identityLink.getUserId();
// 这个groupid是候选组
String groupId = identityLink.getGroupId();
logger.debug("你好啊+userId :{},groupId :{}",userId,groupId);
}
}
/* taskEntity.getIdentityLinks();
taskEntity.getCandidates();*/
}
}
}
@Override
public boolean isFailOnException() {
// TODO Auto-generated method stub
return false;
}
}