spring boot中配置全局监听类

在这里插入图片描述

@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;
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_38441551/article/details/85300641